尝试开发AR应用程序。打开该应用程序时,设备位置为(0,0,0),即如果我打印或显示坐标,则该设备位置为(0,0,0)。我想创建一个门入口处的起点。当其他使用我的应用程序的用户可以在任何地方打开该应用程序。
我想做的是我已经在门的入口处保留了一个AR。用户在任意位置打开应用程序成为起点,所有AR对象都会出现。当他们通过该AR对象时,我想要其设备的坐标为(0,0,0)。但是,如果我在统一编辑器中运行以下代码,它将摄像头移至应用启动的位置。定位到应用的起点。
Camera.main.transform.position=new Vector3(0,0,0);
据我了解,如果我们更改相机在应用中的位置,它可能会显示毛刺
答案 0 :(得分:1)
您的问题非常不清楚-.-
但是如果尝试将摄像机重置为(0,0,0),同时将所有游戏对象保持在相同的相对位置,则可以尝试
var localToCamera = Camera.main.transform.worldToLocalMatrix;
var obj = GameObject.FindSceneObjectsOfType(typeof(GameObject));
foreach (var o in obj)
{
var go = (o as GameObject);
go.transform.FromMatrix(localToCamera * go.transform.localToWorldMatrix);
}
_
编辑:
上面的 UGLY 代码应该做什么: 它将爬过所有GameObject并以如下方式重新放置它们:如果将摄像机设置为位置(0,0,0)并面向(0,0,1),则它们将相对于相机。
注意,执行此代码后,相机本身将重新定位为(0,0,0)并面向(0,0,1),因为
Camera.main.transform.worldToLocalMatrix * localToWorldMatrix ==身份
编辑:
我不能将这段代码放在注释中,因为它太长了。
尝试
// code from the top of my head here, syntax or function names might not be exact
var forward = arcamera.transform.forward;
forward.y = 0;
arcamera.transform.rotation = Quaternion.LookDirection(forward);
// now the camera forward should be in the (x,z) plane
UnityARSessionNativeInterface.GetARSessionNativeInterface().SetWorldOrigin(arcamera.transform);
// since you did not tilt the horizontal plane, hopefully the plane detection still detected vertical and horizontal planes