碰撞事件
碰撞事件简介
1.何为碰撞事件?
当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件。
注:目标物体必须带有 Collider 组件。
比如,一款射击类游戏,我们发射出了子弹,子弹是一个由刚体控制运动的物体,子弹射中了敌人,我们如何监测到这个碰撞??
2.碰撞事件监测方法
方法 | 作用 |
---|---|
OnCollisionEnter(Collision) | 当碰撞开始时调用,只会调用该方法一次 |
OnCollisionExit(Collision) | 当碰撞结束时调用,只会调用该方法一次 |
OnCollisionStay(Collision) | 当碰撞进行中时,会持续调用该方法。 |
Collision 参数:碰撞,一个类。
作用:用于传递碰撞信息。
Collision.gameObject 属性,与当前物体碰撞的物体的引用。
gameObject.name 属性,当前物体的名字。
为Student 和 Wall 各自新建 Collision脚本,删去类中原有 Start 和Update 函数增加如下信息:
//Student碰撞信息
void OnCollisionEnter( Collision coll)
{
if(coll.gameObject.name != "floor")
Debug.Log("Enter " + coll.gameObject.name);
}
void OnCollisionExit(Collision coll)
{
if (coll.gameObject.name != "floor")
Debug.Log("Exit " + coll.gameObject.name);
}
void OnCollisionStay(Collision coll)
{
if (coll.gameObject.name != "floor")
Debug.Log("Stay " + coll.gameObject.name);
}
墙碰撞信息代码与之相同。
结果打印:
触发事件
触发事件简介
1.触发器
将碰撞体组件属性面板上的“Is Trigger”选项选中,当前的游戏物体的碰撞体
就变成了触发器。
注意:移动的刚体物体会穿透碰撞体勾选了**“Is Trigger”**的物体。
为便于观察,可以调整Collider的大小,如下图:
2.触发事件
当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件。
触发用途:不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触发范围”就能执行某些特定操作。
触发事件监测方法
方法 | 作用 |
---|---|
OnTriggerEnter(Collider) | 当进入触发范围时开始时调用,只会调用该方法一次。 |
OnTriggerExit(Collider) | 当离开触发范围时开始调用,只会调用该方法一次。 |
OnTriggerStay(Collider) | 在触发范围内,会持续调用该方法。 |
Collider 参数:碰撞体,一个类。
作用:用于传递触发信息。
Collider.gameObject 属性,进入触发范围内的目标物体的引用。
gameObject.name 属性,当前物体的名字。
//子弹触发器代码
void OnTriggerEnter(Collider coll)
{
Debug.Log("Cube enter " + coll.gameObject.name);
}
void OnTriggerExit(Collider coll)
{
Debug.Log("Cube exit " + coll.gameObject.name);
}
void OnTriggerStay(Collider coll)
{
Debug.Log("Cube stay " + coll.gameObject.name);
}
墙触发信息代码与之相同。