Unity3D教程:滑鼠碰撞檢測與事件監聽
阿新 • • 發佈:2019-02-17
首先建立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都收到了訊息: