Unity3D教程:鼠标碰撞检测与事件监听

使用Unity3D开发的3D游戏,鼠标事件的检测也是常见的问题之一。处理的手段非常简单,请看下文。
首页 新闻资讯 行业资讯 Unity3D教程:鼠标碰撞检测与事件监听

首先创建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!");   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

鼠标点击的时间在Input中显示为Fire1,点击响应后截取到鼠标点击的屏幕上的点的那条射线,并将其进行碰撞检测,从而获取鼠标点击的物体事件。

将此脚本拖到任意GameObject上,运行游戏点击该物体则在Console显示Hit Me!通过这种方式可以实现点击鼠标的事件,并且满足更为高端的需求。Unity3D教程手册

当然很多情况下的响应事件并不是物体本身,比如一个敌人GameObject,里面放一个碰撞体实现碰撞检测,常常是碰撞体上有JS脚本实现碰撞响应,而事件的调用写在GameObject的脚本中,比如这样的框架:

Unity3D教程:鼠标碰撞检测与事件监听

其中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);           }       }   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

然后在那个UpUpwards的脚本中加上响应的方法:

复制

#pragma strict   var words:String;   function ApplyDamage(){       Debug.Log(words);   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

然后在Unity中把这个脚本一次拖到两个upwards和upupwards上面,并且给words赋值,运行发现,这两个GameObject都收到了消息:

Unity3D教程:鼠标碰撞检测与事件监听

原文链接:http://www.unitymanual.com/6292.html

20    2013-06-17 09:12:31    Unity3D