Unity:点击UI按钮时平滑的相机移动



我想让相机在点击UI按钮后移动到某个位置。对于定位,我使用空的游戏对象(CameraPositionStart和CameraPositionFinish)坐标。由于某些原因,相机只是瞬间移动到需要的位置,而不是平稳地移动到它。下面是我的代码:

using UnityEngine; 
using UnityEngine.UI;
public class CameraMover : MonoBehaviour
{
public float speed;
public Button ButtonStartNew;
public GameObject CameraPositionStart;
public GameObject CameraPositionFinish;
private void Update()
{
ButtonStartNew.onClick.AddListener(moveCamera);
}
public void moveCamera()
{
transform.position = Vector3.Lerp(transform.position, CameraPositionFinish.transform.position, Time.deltaTime * speed);
}
}

这种行为可能由两个原因引起。

方法Update每帧执行一次。这里每帧您正在添加一个应该在单击UI上的按钮时进行的额外调用。我怀疑,这样做的结果是,当几百个调用moveCamera都同时发生时,尽管moveCamera只通过Lerp(Time.DeltaTime * Speed)移动变换-对象移动更接近(因为你在打嗝)因为你叫它一堆

private void Update()
{
ButtonStartNew.onClick.AddListener(moveCamera);
}

考虑只在on click事件中添加一个对moveCamera的调用。我们可以在StartAwake中这样做,因为它们只被调用一次。

private void Start()
{
ButtonStartNew.onClick.AddListener(moveCamera);
}

然而,这并不能解决问题。因为如果我们这样做,moveCamera将只被调用一次,结果将是相机将非常轻微地向目标移动并停止。

考虑实现一个Coroutine,它会随着时间(每一帧)移动变换,直到它到达目标。

private void moveCamera()
{
// A coroutine runs every frame until it stops returning values
StartCoroutine(MoveCamera);
}
private IEnumerator MoveCamera()
{
// check the distance and see if we still need to move towards the destination ​
while(Vector3.Distance(transform.position, CameraPositionFinish.transform.position) > 1.0f)
​{
transform.position = Vector3.Lerp(transform.position, CameraPositionFinish.transform.position, Time.deltaTime * speed);

// Return  nothing meaningful and wait until next frame​
yield return null;
}
}

最新更新