[unity]移动物体的几种方法

参考大佬博客:https://www.cnblogs.com/sanyejun/p/7683641.html

方法1:使用Vector3.MoveTowards

 </pre><pre name="code" class="csharp">void Update ()

{

float step = speed * Time.deltaTime;

  gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(10, -3, 50), step);

}

 

方法2:使用插值

void Update ()

{

float step = speed * Time.deltaTime;

  gameObject.transform.localPosition =new Vector3(Mathf.Lerp(gameObject.transform.localPosition.x, 10, step),Mathf.Lerp(gameObject.transform.localPosition.y, -3, step),Mathf.Lerp(gameObject.transform.localPosition.z, 50, step));//插值算法也可以

}

 

方法3:使用iTween

iTween.MoveTo(m_UIbgCamera, iTween.Hash("x",     -20,

                                                "y",     -3,

                                                "z",     50,

                                                "time",  1.0,

                                                "islocal", true

                       ));

 

方法4:使用协程

 StartCoroutine(MoveToPosition());

 IEnumerator MoveToPosition()

    {

        GameObject m_UIbgCamera = GameObject.Find("UI/FengMian/UIbgCamera");

        while (m_UIbgCamera.transform.localPosition != new Vector3(-5, -3, 50))

        {

            m_UIbgCamera.transform.localPosition = Vector3.MoveTowards(m_UIbgCamera.transform.localPosition, new Vector3(-20, -3, 50), 10 * Time.deltaTime);

            yield return 0;

        }

    }

 

 

另附:朝某个方向移动

//方案一

transform.Translate(Vector2.left * speed * Time.deltaTime * moveDir);

//方案二

Vector3 targetVelocity = new Vector2(-moveDir * speed, body2D.velocity.y);

body2D.velocity = Vector3.SmoothDamp(body2D.velocity, targetVelocity, ref curSpeed, 0.1f);
posted @ 2020-12-07 23:03  穷在闹市  阅读(739)  评论(0)    收藏  举报