主要学习碰撞检测的三个事件
1、OnCollisionEnter:两个物体碰触时触发
2、OnCollisionStay:碰撞的过程中触发
3、OnCollisionExit:碰撞结束时触发
测试3个事件的执行顺序:
测试环境:
一个cube一个sphere。 在cube上添加移动脚本,用cube撞击sphere。
// Update is called once per frame
void Update () {
//移动物体
if(Input.GetKey(KeyCode.W))
{
gameObject.transform.Translate(new Vector3(0f,0f,0.1f));
}
}
//如果触发了相应的事件,打印对应的事件名+GameObject名称
void OnCollisionEnter(Collision col)
{
Debug.Log("OnCollisionEnter"+col.gameObject.name);
}
void OnCollisionStay(Collision col)
{
Debug.Log("OnCollisionStay" + col.gameObject.name);
}
void OnCollisionExit(Collision col)
{
Debug.Log("OnCollisionExit" + col.gameObject.name);
}
开始测试:
1>第一次运行动画,没有任何操作。
-可见触发了一次cube和plane的Enter事件,多次cube与plane的Stay事件。并没有触发Exit事件,因为此时cube还在plane上,碰撞未结束。
2>第二次控制cube向前走了一段距离
-又触发了多次stay事件。
3>控制cube撞击了一次sphere,并把sphere装出一段距离
-cube与plane的Stay事件继续增加。
-先触发了一次cube与sphere的Enter事件(首先碰触到sphere)
-又触发了多次cube与sphere的Stay事件(发生碰撞的过程中,一直触发。实际操作中发现,只要移动cube此事件就会触发)
-最后触发了一次cube与sphere的Exit事件(发生碰撞后,将sphere撞离自身,碰撞结束,触发一次Exit事件)
4>尝试控制cube多次撞击sphere(8次)
-cube和plane的Stay事件继续增加
-cube和sphere的Enter事件每碰撞一次触发一次,共8次
-cube和sphere的Stay事件继续增加
-cube和sphere的Exit事件没次碰撞结束触发一次,共8次
5>控制cube将sphere撞出plane
-将sphere撞出plane,之前的各个事件触发次数都有相应的增加,但cube与plane的Exit事件到现在还没有触发,当cube脱离plane时,此事件将触发。
6>控制cube"脱离plane"的范围
-cube与plane的Exit事件触发一次。
总结:
经过此次测试得出以下结论:
-这3个事件的触发顺序一般为OnCollisionEnter首先触发、然后OnCollisionStay触发、最后触发OnCollisionExit
-OnCollisionEnter事件和OnCollisionExit事件一般会"成对"出现,也可能出现Enter事件比Exit事件多(多一次),但一定不会出现Exit事件比Enter事件多的情况。
-测试中发现,只要移动GameObject,OnCollisionStay事件就会触发。
PS:
-第一次发博客
-出于兴趣爱好自学unity3d, 36K纯菜。
-写博客的目的是为了自己看,也算是当做笔记来用。
-其中言论肯定会有错误,偏执的地方,哈哈 也不知道有多少人会看,如果看到了不好的地方,可以帮忙纠正下哦亲~