Unity3d 将对象放置在摄影机的正前方

Unity3d 将对象放置在摄影机的正前方,unity3d,arcore,Unity3d,Arcore,我试图找出如何修改示例ARCore场景中的HelloARController.cs,将对象直接放置在摄影机前面。我的想法是,我们正在从相机向锚点或跟踪平面上的矢量3进行光线投射,所以我们不能获得该光线起点的矢量3,并在该点或附近放置一个对象吗 据我所知,ScreenToWorldPoint应该输出一个与世界对应的屏幕位置矢量3,但它不能正常工作。我尝试了其他选项,而不是ScreenToWorldPoint,但没有达到预期效果。有人有什么建议吗?要将对象放在相机视图的正中间,您必须更改目标游戏对

我试图找出如何修改示例ARCore场景中的HelloARController.cs,将对象直接放置在摄影机前面。我的想法是,我们正在从相机向锚点或跟踪平面上的矢量3进行光线投射,所以我们不能获得该光线起点的矢量3,并在该点或附近放置一个对象吗


据我所知,ScreenToWorldPoint应该输出一个与世界对应的屏幕位置矢量3,但它不能正常工作。我尝试了其他选项,而不是ScreenToWorldPoint,但没有达到预期效果。有人有什么建议吗?

要将对象放在相机视图的正中间,您必须更改目标游戏对象的transform.position(如全能者所说)

就绪代码如下所示:

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;

要将对象放置在相机视图的正中间,您必须更改目标游戏对象的transform.position(如万能年所说)

就绪代码如下所示:

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;

阿曼的建议奏效了。也给了全能者荣誉,因为他们让我开始了正确的方向。以下是我现在拥有的:

// 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;


阿曼的建议奏效了。也给了全能者荣誉,因为他们让我开始了正确的方向。以下是我现在拥有的:

// 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;


“但它没有正常工作”-您的期望值与正在发生的情况是什么?--我们不能读懂大脑,如果没有解释,我们也不知道“工作不正常”是什么意思。此外,如果你只是想让某个东西在摄像机前居中,有没有理由不简单地使用摄像机的
transform.localPosition+offsetZ
?最后,不要使用图像来描绘代码。。。曾经最好将代码粘贴到这里(使用正确的格式),或者至少粘贴到post to,或者类似的东西。谢谢你的指点。我是新来的。transform.local位置已经朝着正确的方向迈出了一大步,谢谢!很乐意帮忙!“但它没有正常工作”-您的期望值与正在发生的情况是什么?--我们不能读懂大脑,如果没有解释,我们也不知道“工作不正常”是什么意思。此外,如果你只是想让某个东西在摄像机前居中,有没有理由不简单地使用摄像机的
transform.localPosition+offsetZ
?最后,不要使用图像来描绘代码。。。曾经最好将代码粘贴到这里(使用正确的格式),或者至少粘贴到post to,或者类似的东西。谢谢你的指点。我是新来的。transform.local位置已经朝着正确的方向迈出了一大步,谢谢!很乐意帮忙!将此便笺移动到答案。@Arman此代码工作正常。但在2或3秒后首先添加到中心的对象移动到位置向上。我想先将其自身放置在位置将此便笺移动到答案。@Arman此代码工作正常。但在2或3秒后首先添加到中心的对象移动到位置向上。我想将其放置在位置首先是它自己