将物体放在相机正前方

Placing objects right in front of camera

我正在尝试弄清楚如何从示例 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,但没有任何效果达到预期效果。有人有什么建议吗?

要将对象放置在摄像机视图的正中央,您必须更改目标游戏对象的 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;

Arman 的建议有效。也感谢 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;