主要学习碰撞检测的三个事件

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上,碰撞未结束。

 

  

prism dryioc 和unity区别 unity和coherence_执行顺序

 

2>第二次控制cube向前走了一段距离

  -又触发了多次stay事件。

  

prism dryioc 和unity区别 unity和coherence_事件触发_02

 

3>控制cube撞击了一次sphere,并把sphere装出一段距离

  -cube与plane的Stay事件继续增加。

  -先触发了一次cube与sphere的Enter事件(首先碰触到sphere)

  -又触发了多次cube与sphere的Stay事件(发生碰撞的过程中,一直触发。实际操作中发现,只要移动cube此事件就会触发)

  -最后触发了一次cube与sphere的Exit事件(发生碰撞后,将sphere撞离自身,碰撞结束,触发一次Exit事件)  

  

prism dryioc 和unity区别 unity和coherence_执行顺序_03

   

 

4>尝试控制cube多次撞击sphere(8次)

  -cube和plane的Stay事件继续增加

  -cube和sphere的Enter事件每碰撞一次触发一次,共8次

  -cube和sphere的Stay事件继续增加

  -cube和sphere的Exit事件没次碰撞结束触发一次,共8次

   

prism dryioc 和unity区别 unity和coherence_事件触发_04

 

 

5>控制cube将sphere撞出plane

  -将sphere撞出plane,之前的各个事件触发次数都有相应的增加,但cube与plane的Exit事件到现在还没有触发,当cube脱离plane时,此事件将触发。

  

prism dryioc 和unity区别 unity和coherence_3d_05

 

6>控制cube"脱离plane"的范围

  -cube与plane的Exit事件触发一次。

  

prism dryioc 和unity区别 unity和coherence_执行顺序_06

 

总结:

  经过此次测试得出以下结论:

  -这3个事件的触发顺序一般为OnCollisionEnter首先触发、然后OnCollisionStay触发、最后触发OnCollisionExit

  -OnCollisionEnter事件和OnCollisionExit事件一般会"成对"出现,也可能出现Enter事件比Exit事件多(多一次),但一定不会出现Exit事件比Enter事件多的情况。

  -测试中发现,只要移动GameObject,OnCollisionStay事件就会触发。

 

PS:

  -第一次发博客

  -出于兴趣爱好自学unity3d, 36K纯菜。

  -写博客的目的是为了自己看,也算是当做笔记来用。

  -其中言论肯定会有错误,偏执的地方,哈哈 也不知道有多少人会看,如果看到了不好的地方,可以帮忙纠正下哦亲~