我正在尝试制作一个游戏,如果用户点击屏幕,他们的角色会从一个点(例如屏幕的左侧)平滑地移动到另一个点(屏幕的右侧)。
我知道你可以通过几种方式做到这一点:Coroutines,Lerp甚至动画。我也不介意代码示例..
有哪些不同的方法来实现这一目标?
提前致谢!
答案 0 :(得分:0)
嗯best
主要是以意见为基础,而不是实际问的好方法......无论如何
其他答案没有提到:
当然,平滑度不是来自Vector3.Lerp
也不来自Coroutines
,而是来自Time.deltaTime
。
此Time.deltaTime
值是自上一帧以来经过的实际时间。这样可以做到所有类型的平滑,特别是总是采用与帧速率无关的相同数量的实时动作和动作。
就动作的具体用例而言,我个人更喜欢使用Vector3.MoveTowards
而不是Vector3.Lerp
,因为后者会越来越慢,越接近目标。 (至少如果你使用transform.position作为第一个值,就像在例子中经常做的那样)
以下是Unity脚本API提供的示例
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public Transform target;
public float speed;
void Update() {
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, target.position, step);
}
}
当然,您也可以将target.position
定义为目标位置,而不是Vector3
。
如果你需要碰撞检测而不应该使用它们,因为你可能只是一步将物体移动到远处,因此不会触发碰撞。
在这种情况下,您可能会在this post
中找到提示