我目前正在尝试使用预定义的相机位置数组平滑地更改相机的位置。它应该是这样的:
- 我按空格键,相机应该会平滑地切换到相机阵列中相机 0的位置。
- 再次按空格键,相机应该会顺利切换到相机阵列中相机1的位置
等等
public class CameraWaypoints : MonoBehaviour { public Camera[] CamPOVs; private Camera _main; private int _indexCurrentCamera; private int _indexTargetCamera; private float _speed = 0.1f; void Start () { _indexTargetCamera = 0; _main = Camera.main; //disable all camera's for (int i = 0; i < CamPOVs.Length; i++) { CamPOVs[i].enabled = false; } _indexCurrentCamera = 0; } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Space)) { if (_indexTargetCamera < CamPOVs.Length) { _indexCurrentCamera = _indexTargetCamera; _indexTargetCamera++; } } //prevent array out of bounds if (_indexTargetCamera >= CamPOVs.Length) { _indexTargetCamera = 0; } _main.transform.position = Vector3.Lerp(CamPOVs[_indexCurrentCamera].transform.position, CamPOVs[_indexTargetCamera].transform.position, Time.time * _speed); _main.transform.rotation = CamPOVs[_indexTargetCamera].transform.rotation; } }
使用我目前的解决方案,相机实际上可以平滑地移动到目标。但是,一旦达到该目标,然后按空格键,相机就会更改为目标,而不会进行平滑处理。
就好像一旦 lerp 成功完成了一次,它就不会再 lerp 了,除非我重新开始。
编辑:澄清一下:按下空格键时,相机目标实际上会发生变化,并且相机会跟随这个目标。问题是,一旦相机位置到达目标位置一次,它就不再平滑地移动到目标,而是立即改变它的位置到目标。