AR对象漂移/飞行问题Unity AR基础

问题描述 投票:0回答:1

我是AR开发的新手,很抱歉这个菜鸟问题。我在相机前生成了一个AR对象,该对象可以很好地生成,但是有时,该对象开始向随机方向漂移。谁能帮我解决这个问题?我已经搜索了很长时间;我找不到修复程序。

用于对象生成

prefabInstance = Instantiate(placeObject);
GetComponent<ARSessionOrigin>().MakeContentAppearAt(prefabInstance.transform, new Vector3(0, -0.76f, 3.35f), Quaternion.identity);

我想摇动以粉碎物体。物品切成碎片后,我将其重新放置在其他区域。我只重定位父对象,而块位于该对象的子对象中。

重定位代码

int temp = UnityEngine.Random.Range(0, ReferenceSpawnPoint.Length); 
gObject.transform.position = new Vector3(ReferenceSpawnPoint[temp].position.x, ReferenceSpawnPoint[temp].position.y, ReferenceSpawnPoint[temp].position.z); 
float y = UnityEngine.Random.Range(0, 360); 
float z = UnityEngine.Random.Range(-10, 10); 
gObject.transform.rotation = Quaternion.Euler(0, y, 0);

我还将附加视频的链接;请看一下,您就会明白我在说什么video link。为方便起见,请从0:30秒开始。

非常感谢您的帮助。

有时我也会黑屏;这是否意味着AR会话尚未初始化?

插件/工具版本:

  • Unity:2019.2.7f2
  • XR ARCore:3.1.3
  • XR AR Foundation:3.1.3
  • XR ARKit:3.1.3
  • XR旧版输入助手:2.1.4
c# unity3d augmented-reality arkit arcore
1个回答
0
投票

似乎您放置对象的方式是错误的。更好的方法是使用光线投射并将3D对象放置在通过用户输入(例如触摸屏幕)定义的某个位置。

AR Foundation示例场景具有一个名为PlaceOnPlane.cs的脚本,该脚本显示了如何检测用户何时触摸屏幕,然后从屏幕上向世界进行光线广播以使游戏对象更完整:

if (Input.touchCount == 1) {
    if (m_RaycastManager.Raycast(Input.GetTouch(0).position, s_Hits, TrackableType.PlaneWithinPolygon))
        {
            // Raycast hits are sorted by distance, so the first one
            // will be the closest hit.
            var hitPose = s_Hits[0].pose;

            if (spawnedObject == null)
            {
                spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
            }
        }

一旦在“实际”位置(例如hitPose.position)实例化模型,您就不会再看到它的漂移。

© www.soinside.com 2019 - 2024. All rights reserved.