问题描述
我正在使用地理围栏条件。
我最初生成了无限数量的水平平面,并附加了一个包含语义标签的合成对象组件。
然后我在运行时根据数据库中的数据多次实例化一个 Prefab。
每个实例化的对象都有自己的边界框,指定了唯一的纬度/经度。
纬度/经度设置为小数点后五位。纬度/经度范围设置为 1e-04
这在模拟器中一切正常,使用我当前的 GPS 位置作为模拟中心。
但是,它在部署到物理设备时不起作用:Android 11、Pixel 3 XL
我尝试过不同的范围。
有关信息,我正在请求 FineLocation 的许可。这部分似乎可以正常工作,因为我可以将设备的纬度/经度打印到屏幕上。
但是,根本没有地理围栏对象出现。
我已经尝试过禁用条件,然后在按照我在旧线程中看到的建议配置后在运行时启用它。
我正在使用 Unity 2020.3.11f1
var geoFenceCondition = myPrefab.GetComponent<GeoFenceCondition>();
var boundingBox= new GeographicBoundingBox
{
center = new GeographicCoordinate(46.34040,5.07097),latitudeExtents = 1e-04,longitudeExtents = 1e-04,};
geoFenceCondition.BoundingBox=boundingBox;
解决方法
来自 Unity Technologies 的支持联系人能够帮助解决此问题,因此我将在此处分享解决方案。
因为 MARS db 以最佳格式拥有自己的各种条件数据的副本,并且由于条件检查在后台线程上运行以提高性能,所以每当对运行时的条件。
“调用 SyncModifications() 通知查询数据库更改并安排“修改”更改操作。修改更改可能需要几帧才能被接收,因为数据库查询调度线程与主线程间歇性同步通过动作缓冲区。”
更多信息:
https://docs.unity3d.com/Packages/com.unity.mars@1.3/api/Unity.MARS.Proxy.html
https://docs.unity3d.com/Packages/com.unity.mars@1.3/api/Unity.MARS.ProxyGroup.html