歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Unity3D游戲物體跟著鼠標方向移動

效果:當點擊鼠標左鍵時,游戲對象會朝鼠標點擊的方向移動,類似魔獸爭霸一樣。

思路:把鼠標的坐標轉化成世界坐標(鼠標默認是屏幕坐標),然後當點擊鼠標時,物體將朝著鼠標的世界坐標方向移動。

如果你看到這的話,最好先別往下看,自己按著這個思路試做一下,實在不行再看看我的哈~~~~

  1. var world:Vector3;  
  2. var speed:float=0;//物體的移動速度   
  3. function Update (){  
  4.   var screenpos=Camera.main.WorldToScreenPoint(transform.position);//物體的世界坐標轉化成屏幕坐標   
  5.   var e:Vector3=Input.mousePosition;//鼠標的位置   
  6.   //當點擊鼠標左鍵時   
  7.   if(Input.GetMouseButton(0)){  
  8.      e.z=screenpos.z;//1.因為鼠標的屏幕 Z 坐標的默認值是0,所以需要一個z坐標   
  9.      world=Camera.main.ScreenToWorldPoint(e);   
  10.      speed=1;      
  11.   }  
  12.   if(transform.position==world){        
  13.      speed=0;  
  14.   }else{  
  15.      animation.Play("walk");//這是我自身帶的一個默認動畫,你可以把它刪了   
  16.   }  
  17.   transform.LookAt(world); //物體朝向鼠標       
  18.   transform.Translate(Vector3.forward*speed*Time.deltaTime);  
  19.     
  20. }  

當然,上面那個適合垂直平面,即攝像頭垂直x-z平面,但一般游戲都不會垂直的。如果不垂直的話,用上面方法可能就會出現類似游戲對象穿透地面的現象,所以我們得改一下代碼。

就只用把world=Camera.main.ScreenToWorldPoint(e); 改成以下這句就行了

  1. world.x=Camera.main.ScreenToWorldPoint(e).x;   
  2. world.z=Camera.main.ScreenToWorldPoint(e).z;  
  3. world.y=transform.position.y;  

注:穿透地面現象是Y軸,所以讓y軸不變,且大小等於游戲對象的y值。

Copyright © Linux教程網 All Rights Reserved