Unity的一些东西

unity 移动物体到指定位置的几种方法

2017-05-26  本文已影响3294人  夜行水寒

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读