Unity3D教程:鼠標(biāo)碰撞檢測(cè)與事件監(jiān)聽(tīng)
作者:U3d
使用Unity3D開(kāi)發(fā)的3D游戲,鼠標(biāo)事件的檢測(cè)也是常見(jiàn)的問(wèn)題之一。處理的手段非常簡(jiǎn)單,請(qǐng)看下文。
首先創(chuàng)建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!");
- }
鼠標(biāo)點(diǎn)擊的時(shí)間在Input中顯示為Fire1,點(diǎn)擊響應(yīng)后截取到鼠標(biāo)點(diǎn)擊的屏幕上的點(diǎn)的那條射線(xiàn),并將其進(jìn)行碰撞檢測(cè),從而獲取鼠標(biāo)點(diǎn)擊的物體事件。
將此腳本拖到任意GameObject上,運(yùn)行游戲點(diǎn)擊該物體則在Console顯示Hit Me!通過(guò)這種方式可以實(shí)現(xiàn)點(diǎn)擊鼠標(biāo)的事件,并且滿(mǎn)足更為高端的需求。Unity3D教程手冊(cè)
當(dāng)然很多情況下的響應(yīng)事件并不是物體本身,比如一個(gè)敵人GameObject,里面放一個(gè)碰撞體實(shí)現(xiàn)碰撞檢測(cè),常常是碰撞體上有JS腳本實(shí)現(xiàn)碰撞響應(yīng),而事件的調(diào)用寫(xiě)在GameObject的腳本中,比如這樣的框架:
其中Cube是檢驗(yàn)碰撞的碰撞體,而UpUpwards是響應(yīng)的物體。那么腳本就需要這樣寫(xiě):
- 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);
- }
- }
- }
然后在那個(gè)UpUpwards的腳本中加上響應(yīng)的方法:
- #pragma strict
- var words:String;
- function ApplyDamage(){
- Debug.Log(words);
- }
然后在Unity中把這個(gè)腳本一次拖到兩個(gè)upwards和upupwards上面,并且給words賦值,運(yùn)行發(fā)現(xiàn),這兩個(gè)GameObject都收到了消息:
責(zé)任編輯:彭凡
來(lái)源:
Unity3D教程手冊(cè)


相關(guān)推薦




