1. 程式人生 > >Unity3D教程:滑鼠碰撞檢測與事件監聽

Unity3D教程:滑鼠碰撞檢測與事件監聽

首先建立JS指令碼,原始碼如下:

  1. function Update () {   
  2.     if(Input.GetButtonDown("Fire1")){   
  3.         var ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
  4.         var hit : RaycastHit;   
  5.         if(Physics.Raycast(ray,hit)){   
  6.             hit.collider.SendMessage("ApplyDamage",1,SendMessageOptions.DontRequireReceiver);   
  7.         }   
  8.     }   
  9. }   
  10. function ApplyDamage(){   
  11.     Debug.Log("HitMe!");   
  12. }   

滑鼠點選的時間在Input中顯示為Fire1,點選響應後擷取到滑鼠點選的螢幕上的點的那條射線,並將其進行碰撞檢測,從而獲取滑鼠點選的物體事件。

將此指令碼拖到任意GameObject上,運行遊戲點選該物體則在Console顯示Hit Me!通過這種方式可以實現點選滑鼠的事件,並且滿足更為高階的需求。Unity3D教程手冊

當然很多情況下的響應事件並不是物體本身,比如一個敵人GameObject,裡面放一個碰撞體實現碰撞檢測,常常是碰撞體上有JS指令碼實現碰撞響應,而事件的呼叫寫在GameObject的指令碼中,比如這樣的框架:

Unity3D教程:滑鼠碰撞檢測與事件監聽

其中Cube是檢驗碰撞的碰撞體,而UpUpwards是響應的物體。那麼指令碼就需要這樣寫:

  1. function Update () {   
  2.     if(Input.GetButtonDown("Fire1")){   
  3.         var ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
  4.         var hit : RaycastHit;   
  5.         if(Physics.Raycast(ray,hit)){   
  6.             hit.collider.SendMessageUpwards("ApplyDamage",1,SendMessageOptions.DontRequireReceiver);   
  7.         }   
  8.     }   
  9. }   

然後在那個UpUpwards的指令碼中加上響應的方法:

  1. #pragma strict   
  2. var words:String;   
  3. function ApplyDamage(){   
  4.     Debug.Log(words);   
  5. }   

然後在Unity中把這個指令碼一次拖到兩個upwards和upupwards上面,並且給words賦值,執行發現,這兩個GameObject都收到了訊息: