我试图弄清楚如何从示例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,但没有任何效果。有人有任何提示吗?
答案 0 :(得分: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;
答案 1 :(得分: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示例代码,只有在我的情况下点击点云中的点(或默认情况下平面上的点)时才会放置一个对象。我希望它表现得如此单击屏幕上的任何位置,它会将一个对象锚定到点云中的附近点,而不一定是您点击的点。对于如何做到的任何想法?
对于那些不了解的人的提示:如果你想将某些东西锚定在云中而不是在飞机上,请更改
TrackableHitFlag raycastFilter = TrackableHitFlag.PlaneWithinBounds | TrackableHitFlag.PlaneWithinPolygon;
到
TrackableHitFlag raycastFilter = TrackableHitFlag.PointCloud;