我正在寻找更新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值,以使预制件靠近摄像机(但在世界上位置却有所不同。)
答案 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);
其中smoothFactor
中0.5
的内容为:每帧将对象设置为currentPosition
和targetPosition
中心的位置。靠近0
的值将导致运动变慢,靠近1
的值将导致到达targetPosition
的速度更快。
请注意,实际上,这种方法永远不会真正完全到达targetPosition
,而只会非常接近,但通常在AR相机始终不停地移动的情况下,这并不重要。