首页 文章

将物体放在相机前面

提问于
浏览
1

我试图找出如何从示例ARCore场景修改HelloARController.cs直接将对象放在相机前面 . 我的想法是,我们是从摄像机到锚点或跟踪平面上的Vector3进行光线投射,所以我们不能得到该光线起点的Vector3并将物体放置在该点或附近?

I have tried lots, and although I am somewhat a beginner, I have come up with this

根据我的理解,ScreenToWorldPoint应输出与世界对应的屏幕位置的vector3,但它无法正常工作 . 我尝试过其他选项而不是ScreenToWorldPoint,但没有任何效果 . 有人有任何提示吗?

2 回答

  • 0

    要将对象放在摄像机视图的中间,您必须更改目标gameObject的transform.position(正如AlmightyR所说) .

    准备好的代码看起来像这样:

    GameObject camera;
    GameObject object;
    float distance = 1;
    
    object.transform.position = camera.transform.position + camera.transform.forward * distance;
    

    由于摄像机的前向分量(Z轴)始终在摄像机所在的方向上,因此您可以采用该向量的方向并将其乘以您希望放置对象的距离 . 如果你想让你的物体始终保持在那个位置,无论相机如何移动,你都可以让它成为相机变换的孩子 .

    object.transform.SetParent(camera.transform);
    object.transform.localPosition = Vector3.forward * distance;
    
  • 0

    阿曼的建议有效 . 同样也归功于AlmightyR,因为他们让我开始朝着正确的方向前进 . 这就是我现在拥有的:

    // Set a position in front of the camera
    float distance = 1;
    Vector3 cameraPoint = m_firstPersonCamera.transform.position + m_firstPersonCamera.transform.forward * distance;
    
    // Intanstiate an Andy Android object as a child of the anchor; it's transform will now benefit
    // from the anchor's tracking.
    var andyObject = Instantiate(m_andyAndroidPrefab, cameraPoint, Quaternion.identity,anchor.transform);
    

    唯一的问题是,由于现有的HelloAR示例代码,只有在我的情况下点击点 Cloud 中的点(或默认情况下在平面上的点)时才会放置对象 . 我希望它表现得如此单击屏幕上的任何位置,它会将一个对象锚定到点 Cloud 中的附近点,而不一定是您点击的点 . 有什么想法怎么做?

    对于那些不知道的人的侧面提示:如果你想把一些东西锚定在 Cloud 中的某个点而不是在飞机上,那就改变

    TrackableHitFlag raycastFilter = TrackableHitFlag.PlaneWithinBounds | TrackableHitFlag.PlaneWithinPolygon;
    

    TrackableHitFlag raycastFilter = TrackableHitFlag.PointCloud;
    

相关问题