【发布时间】:2016-03-18 01:19:34
【问题描述】:
我有一个协程,每当玩家到达游戏中的某个点时,我的相机就会向上移动。我使用了一个协程,以便相机随着时间的推移平稳移动。
这是我的代码的 sn-p:
private IEnumerator MoveCameraUpCoroutine(Vector3 startPos, Vector3 endPos, float duration)
{
float elapsedTime = 0;
while(elapsedTime < duration)
{
transform.position = Vector3.Lerp(startPos, endPos, (elapsedTime/duration));
elapsedTime += Time.deltaTime;
yield return null;
}
}
public void MoveCameraUp(Vector3 startPos, Vector3 endPos, float duration)
{
StartCoroutine(MoveCameraUpCoroutine(startPos, endPos, duration));
}
在我的控制器脚本中,我只是这样调用我的协程:
cam.GetComponent<CameraMovement>().MoveCameraUp(cam.transform.position,
new Vector3(cam.transform.position.x, cam.transform.position.y + setupLevel.heightOfBlock, cam.transform.position.z),
0.1f);
这样做的问题是,相机的运动在应该停止的位置上并不总是一致的。我做了一些调试。在第一次运行时,相机移动到了0.7864508 yPos。在第二次运行时,摄像头移动到了0.7789915 yPos。等等。这是不一致的。
但是当我简单地使用Translate 而不是我的协程时:
cam.transform.Translate(0, setupLevel.heightOfBlock, 0);
我在0.7876318 处获得了相机 yPos 的一致最终值,这正是我所需要的。但是这段代码不会随着时间的推移平稳地移动相机,这不是我想要的。
有人知道如何解决这个协程问题吗?我不知道,但我认为我的协程代码有问题。任何帮助是极大的赞赏。
【问题讨论】:
-
您能否详细说明一下您所说的翻译无法顺利移动相机的意思?
-
@VenkatatAxiomStudios 我的意思是,如果我只是调用 Translate,它不会随着时间的推移移动相机。移动看起来就像相机从 A 点传送到 B 点,希望这是有道理的