会话开始使用ARFoundation后,如何使模型出现在AR Camera的前面?

时间:2019-11-12 05:56:03

标签: unity3d augmented-reality

我正在寻找更新ARcamera的位置。我正在执行ImageTracking项目。它检测到一个图像,并且在镜头前显示了一个对应的预制件。它开始播放动画。动画结束后,我希望预制件能够真正出现当我在动画代码之后输入代码prefab.position=ARcamera.position;时,我认为预制件将转到应用程序启动时ARCamera所在的初始位置,即(0,0,0)。

如何使预制件真正靠近前置摄像头。

  speed = 10f;
  float step = speed * Time.deltaTime;
  Showprefabs.transform.GetChild(0).position = Vector3.MoveTowards(Showprefabs.transform.GetChild(0).position,
                                             new Vector3(Arcam.transform.position.x, Arcam.transform.position.y + 0.2f,
                                             Arcam.transform.position.z + 6.3f), step);

///我使用编辑器添加了0.2f和6.3f值,以使预制件靠近摄像机(但在世界上位置却有所不同。)

1 个答案:

答案 0 :(得分:2)

首先,我希望“预制”表示您已实例化GameObject。移动预制件没有任何意义;)


您尝试计算目标位置,但是使用了世界空间坐标。

您可能想做类似的事情

var targetObject = Showprefabs.transform.GetChild(0);
var currentPosition = targetObject.position;

var targetPosition = Arcam.transform.position 
    // Place it 60cm in front of the camera
    + Arcam.transform.forward * 0.6f
    // additionally move it "up" 20cm perpendicular to the view direction
    + Arcam.transform.up * 0.2f;

targetObject.position = Vector3.MoveTowards(currentPosition, targetPosition, step * Time.deltaTime);

如果您希望该运动更平稳一些,以便在已经很近的情况下运动得更慢,而在更远的地方则运动得更快,您可能会对此感兴趣,而不是在此处使用Vector3.Lerp

public float smoothFactor = 0.5f;

targetObject.position = Vector3.Lerp(currentPosition, targetPosition, smoothFactor);

其中smoothFactor0.5的内容为:每帧将对象设置为currentPositiontargetPosition中心的位置。靠近0的值将导致运动变慢,靠近1的值将导致到达targetPosition的速度更快。

请注意,实际上,这种方法永远不会真正完全到达targetPosition,而只会非常接近,但通常在AR相机始终不停地移动的情况下,这并不重要。