菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
123
0

unity 移动物体到指定位置的四种方法 【精确移动到指定位置,再也不是计算距离了,物体可以高速移动】

原创
05/13 14:22
阅读数 44490

方法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.     }  


 

 朝某个方向移动

        
//方案一
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);

 

 

 

发表评论

0/200
123 点赞
0 评论
收藏