Unity3D教程:鼠標碰撞檢測與事件監聽
作者:U3d
使用Unity3D開發的3D游戲,鼠標事件的檢測也是常見的問題之一。處理的手段非常簡單,請看下文。
首先創建JS腳本,源碼如下:
- function Update () {
- if(Input.GetButtonDown("Fire1")){
- var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- var hit : RaycastHit;
- if(Physics.Raycast(ray,hit)){
- hit.collider.SendMessage("ApplyDamage",1,SendMessageOptions.DontRequireReceiver);
- }
- }
- }
- function ApplyDamage(){
- Debug.Log("HitMe!");
- }
鼠標點擊的時間在Input中顯示為Fire1,點擊響應后截取到鼠標點擊的屏幕上的點的那條射線,并將其進行碰撞檢測,從而獲取鼠標點擊的物體事件。
將此腳本拖到任意GameObject上,運行游戲點擊該物體則在Console顯示Hit Me!通過這種方式可以實現點擊鼠標的事件,并且滿足更為高端的需求。Unity3D教程手冊
當然很多情況下的響應事件并不是物體本身,比如一個敵人GameObject,里面放一個碰撞體實現碰撞檢測,常常是碰撞體上有JS腳本實現碰撞響應,而事件的調用寫在GameObject的腳本中,比如這樣的框架:
其中Cube是檢驗碰撞的碰撞體,而UpUpwards是響應的物體。那么腳本就需要這樣寫:
- function Update () {
- if(Input.GetButtonDown("Fire1")){
- var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- var hit : RaycastHit;
- if(Physics.Raycast(ray,hit)){
- hit.collider.SendMessageUpwards("ApplyDamage",1,SendMessageOptions.DontRequireReceiver);
- }
- }
- }
然后在那個UpUpwards的腳本中加上響應的方法:
- #pragma strict
- var words:String;
- function ApplyDamage(){
- Debug.Log(words);
- }
然后在Unity中把這個腳本一次拖到兩個upwards和upupwards上面,并且給words賦值,運行發現,這兩個GameObject都收到了消息:
責任編輯:彭凡
來源:
Unity3D教程手冊


相關推薦
2013-06-14 09:54:04
2013-06-18 08:49:15




