unity 移动物体到指定位置的几种方法
ONE
使用Unity自带的方法Vector3.MoveTowards()
float speed = 5;
gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(10,10, 50), speed * Time.deltaTime);
说明:使当前物体移动到点(10,10,50)
这里有个Time.deltaTime怎么理解(⊙o⊙)???
Update()的刷新是按照每帧来显示的,但是Time.deltaTime是按照秒来统计的。
大神文章:http://blog.csdn.net/yexudengzhidao/article/details/52814561
Two
使用插值运算
float speed = 5;
float step = speed * Time.deltaTime;
gameObject.transform.localPosition =new Vector3(Mathf.Lerp(gameObject.transform.localPosition.x, 10, step),Mathf.Lerp(gameObject.transform.localPosition.y, 10, step),Mathf.Lerp(gameObject.transform.localPosition.z, 50, step));
说明:使当前物体移动到(10,10,50)
Mathf Lerp 的含义就是,从某一个值,到某一个值的过渡,根据这个百分比,我们就可以得到一个 进度值。可以是逐渐增大的,也可以是逐渐减小的。
Mathf Lerp (参数A,参数B,参数C)表示:从A变化到B,每一次变化的比例为C
Mathf Lerp方法的圣典解释:http://www.ceeger.com/Script/Mathf/Mathf.Lerp.html
Three
通过DoTween插件来计算(DoTween官网:http://dotween.demigiant.com/)
using DG.Tweening;
float speed = 5;
Tweener tweener = gameObject.transform.localPosition.DOMove(new Vector3(10,10,50),speed * Time.deltaTime);
Four
通过协程来移动gameObject(还是个协程渣渣,只会简单的协程用法,还得努力学习!!!)
public float speed = 10;
void Start () {
StartCoroutine(MoveToPosition());
}
IEnumerator MoveToPosition()
{
while (gameObject.transform.localPosition != new Vector3(10, 10, 50))
{
gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(10, 10, 50), 10 * Time.deltaTime);
yield return 0;
}
}