效果:當點擊鼠標左鍵時,游戲對象會朝鼠標點擊的方向移動,類似魔獸爭霸一樣。
思路:把鼠標的坐標轉化成世界坐標(鼠標默認是屏幕坐標),然後當點擊鼠標時,物體將朝著鼠標的世界坐標方向移動。
如果你看到這的話,最好先別往下看,自己按著這個思路試做一下,實在不行再看看我的哈~~~~
- var world:Vector3;
- var speed:float=0;//物體的移動速度
- function Update (){
- var screenpos=Camera.main.WorldToScreenPoint(transform.position);//物體的世界坐標轉化成屏幕坐標
- var e:Vector3=Input.mousePosition;//鼠標的位置
- //當點擊鼠標左鍵時
- if(Input.GetMouseButton(0)){
- e.z=screenpos.z;//1.因為鼠標的屏幕 Z 坐標的默認值是0,所以需要一個z坐標
- world=Camera.main.ScreenToWorldPoint(e);
- speed=1;
- }
- if(transform.position==world){
- speed=0;
- }else{
- animation.Play("walk");//這是我自身帶的一個默認動畫,你可以把它刪了
- }
- transform.LookAt(world); //物體朝向鼠標
- transform.Translate(Vector3.forward*speed*Time.deltaTime);
-
- }
當然,上面那個適合垂直平面,即攝像頭垂直x-z平面,但一般游戲都不會垂直的。如果不垂直的話,用上面方法可能就會出現類似游戲對象穿透地面的現象,所以我們得改一下代碼。
就只用把world=Camera.main.ScreenToWorldPoint(e); 改成以下這句就行了
- world.x=Camera.main.ScreenToWorldPoint(e).x;
- world.z=Camera.main.ScreenToWorldPoint(e).z;
- world.y=transform.position.y;
注:穿透地面現象是Y軸,所以讓y軸不變,且大小等於游戲對象的y值。