【问题标题】:arcore, placing 3D model without the touch with unityarcore,统一放置3D模型,无需触摸
【发布时间】:2019-08-19 21:47:13
【问题描述】:

我正在使用 ARCore 和 Unity 制作 AR 应用程序。

我想将 3D 模型放置在不接触的垂直墙上。

差不多实现了,但是在创建3D模型的时候,一直往左往下走。

我想是因为我设置了锚点位置

Vector3 position = new Vector3(0,0,0);

但如果我将锚点位置更改为

 Vector3 position = new Vector3 (hit.Pose.position.x, hit.Pose.position.y, hit.Pose.position.z)

它也不会去中心。

有谁知道如何将 3D 物体放在平面的中间?

TrackableHit hit;     
TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon |
TrackableHitFlags.FeaturePointWithSurfaceNormal;


if (Frame.Raycast(transform.position.x,transform.position.y, raycastFilter, out hit))
{
    if (CurrentNumberOfGameObjects < numberOfGameObjectsAllowed)
        {
            Destroy(ARObject);

        if ((hit.Trackable is DetectedPlane) 
             && Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position, hit.Pose.rotation * Vector3.up) < 0)
        {
            Debug.Log("Hit at back of the current DetectedPlane");
        }
        else
        {
            Vector3 position = new Vector3(0,0,0);
            Quaternion rotation = new Quaternion(0f, 0f, 0f, 1f);

            ARObject = Instantiate(ARAndroidPrefab, hit.Pose.position, hit.Pose.rotation);                                                  
            ARObject.transform.Rotate(-90, 0, 0, Space.Self);
            var anchor = Session.CreateAnchor(new Pose(position, rotation));
            ARObject.transform.parent = anchor.transform;
                CurrentNumberOfGameObjects = CurrentNumberOfGameObjects + 1;

                // Hide Plane once ARObject is Instantiated 
                foreach (GameObject Temp in DetectedPlaneGenerator.instance.PLANES) //RK
                {
                    Temp.SetActive(false);
                }
            }
        }
    }

【问题讨论】:

  • 只是一些一般性说明:您可以/应该使用Vector3.zero,而不是new Vector3(0,0,0);而不是new Quaternion(0,0,0,1) 使用Quaternion.IdentityARObject.transform.Rotate(0, 0, 0, Space.Self); 绝对什么都不做......你可能会提醒 ARObject.transform.localRotation = Quaternion.Identity;
  • @derHugo 谢谢你的评论,我在你写的时候修改了它。而旋转部分是我的错误。它应该是 (-90,0,0)。
  • 您是否尝试先创建锚点,然后再进行Instantiate(ARAndroidPrefab, hit.Pose.position, hit.Pose.rotation, anchor.transform)
  • 我也觉得某处缺少} ;)
  • 我刚才试过了,但是它在左下,在z轴的内侧。

标签: unity3d arcore


【解决方案1】:

我改了代码

Vector3 position = Vector3.zero; // Vector3 position = new Vector3(0,0,0);

Vector3 position = new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y , hit.Pose.position.z);

然后它就起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多