美文网首页Unity的一些东西
unity 移动物体到指定位置的几种方法

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

作者: 夜行水寒 | 来源:发表于2017-05-26 14:30 被阅读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;
        }
    }
    

    相关文章

      网友评论

        本文标题:unity 移动物体到指定位置的几种方法

        本文链接:https://www.haomeiwen.com/subject/fofxfxtx.html