unity3d中常规移动的四种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3d中常规移动的四种方法相关的知识,希望对你有一定的参考价值。

什么叫常规移动。。。
纯粹的移动,在API来看只有transform.Translate吧

其他的诸如,三元数差值Vector3.Lerp,及其拓展定速靠近Vector3.MoveTowards,或者平滑阻尼Vector3.SmoothDamp,甚至直接改坐标值,都是可以达到移动的目的,不过这是对三元数Vector3这个结构体的操作,不是专门做移动的,因为Vector3可能是坐标,也可能是角度,或者是向量,也可以是缩放大小,或者自定义的其他的意义。
再说其他的,对某坐标轴的操作,比如改,x,y,z坐标,用Mathf.Lerp或者Mathf.MoveTowards或者其他的修改方式,和上面说的改Vector3一个原理,属于对坐标这个属性的操作。
其实Translate内部也是这个原理,改的是position,也是Vector3。。。
总归来说,所有的移动方式都是对坐标position这个属性的操作,也就是对Vector3的改变。

至于你说的常规移动的四种方法,不知道从哪看来的,一般没这种说法。。。
参考技术A 动的四种方法

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

http://blog.csdn.net/lcy0221/article/details/44040739

方法1:使用Vector3.MoveTowards

 

[csharp] view plain copy
 
  1. </pre><pre name="code" class="csharp">void Update ()   
  2. {  
  3.     float step = speed * Time.deltaTime;  
  4.     gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(10, -3, 50), step);  
  5. }  

 

 

方法2:使用插值

 

[csharp] view plain copy
 
  1. void Update ()   
  2. {  
  3.     float step = speed * Time.deltaTime;  
  4.     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));//插值算法也可以  
  5. }  

 

方法3:使用iTween

[csharp] view plain copy
 
  1. iTween.MoveTo(m_UIbgCamera, iTween.Hash("x",     -20,  
  2.                                                 "y",     -3,  
  3.                                                 "z",     50,  
  4.                                                 "time",  1.0,  
  5.                                                 "islocal", true  
  6.                        ));  



 

方法4:使用协程

 

[csharp] view plain copy
 
  1. StartCoroutine(MoveToPosition());  

 

 

 

[csharp] view plain copy
 
    1. IEnumerator MoveToPosition()  
    2.     {  
    3.         GameObject m_UIbgCamera = GameObject.Find("UI/FengMian/UIbgCamera");  
    4.         while (m_UIbgCamera.transform.localPosition != new Vector3(-5, -3, 50))  
    5.         {  
    6.             m_UIbgCamera.transform.localPosition = Vector3.MoveTowards(m_UIbgCamera.transform.localPosition, new Vector3(-20, -3, 50), 10 * Time.deltaTime);  
    7.             yield return 0;  
    8.         }  
    9.     }  

以上是关于unity3d中常规移动的四种方法的主要内容,如果未能解决你的问题,请参考以下文章

坐稳,带你翱翔Unity3D的四种坐标系

unity3d俯视角简易移动控制脚本及其易错点小分享

Unity3D实习生面试题总结-数据结构与算法相关

Unity3D 角色(物体) 移动方法 合集

(转)Unity3D中移动物体位置的几种方法

在 Unity3D 中直接设置 GameObject 的四元数,无需每次都构造新的对象