Unity篇05:碰撞器、触发器、刚体 - kudan-game/ArtArtist-Repo GitHub Wiki

碰撞器、触发器、刚体

Unity引擎触发器系统有三个属性:Box Collider、Is Trigger、Rigibody

  • Box Collider:Unity3D的GameObject提供的基本模型才具有这个属性,表示该物体是否会和别的物体发生碰撞。

  • Is Trigger:BoxCollider的子选项,表示该物件是否为一个触发器。

  • Rigibody:选中物件,才能在菜单“Component”里,给物件添加Rigibody组件。

1.碰撞器

1、只要有刚体有碰撞器,并且与其他碰撞器碰撞就会进入自身的碰撞器方法。

2、没有刚体,有碰撞器的物体被一个拥有刚体的碰撞器碰撞,都会调用自身的碰撞器方法。

3、没有刚体的两个碰撞器相撞不会调用任何碰撞器方法。

结论:
碰撞器(Collider)不需要刚体(Rigid body)
刚体(Rigid body)要发生碰撞,一定需要碰撞器(Collider)
碰撞器决定了碰撞发生时的边界条件
刚体决定了碰撞发生后的物体的运动效果
没有碰撞器的刚体,会在物理模拟中相互穿透

2、触发器方法

两Collider相碰,至少要有一个物体具有Rigibody刚体才会触发Trigger函数。当物体进来,OnTriggerEnter当然会触发。出去时,OnTriggerExit也当然触发。那么物体在进来后Destory后会如何?经过测试是:不会调用OnTriggerExit。

基本规则:脚本(含有触发判断的 OnTriggerEnter() 判断函数)和Rigibody同为一个物件的组件,Box Collider必须选中。此时两个物件的Box Collider必须为选中。而 Is Trigger选项必须“至少”有一个物件为选中(可以按逻辑来判断哪个为触发器)。 脚本中的OnTriggerEnter()可以有两种判断出发方式,此函数参数的数据类型为 Collider。 OnTriggerEnter( gameObj : Collider ),一旦触发器和Collider发生碰撞,便会触发此函数,其参数便是不包含脚本的物件的gameObject。可以通过判断其成员 name(物体在Hierarchy面板中的名字) 或 tag(物件在Inspector面板的Tag选项中的名字) 的字符串,来判定是哪个物件。

        //例如,打飞机游戏中给飞机定义的触发器方法
        private void OnTriggerEnter(Collider other)
        {
            //判断如果飞机撞到了敌人
            if (other.tag.CompareTo("Respawn") == 0)
            {
                //飞机掉1血
                m_life -= 1;
                Debug.Log("Player was hit!");
                if (m_life <= 0)
                {
                    //飞机血掉完死亡
                    Debug.Log("Player dead!");
                    Destroy(this.gameObject);
                }
            }
        }
结论:
想要打印触发器方法,必须一方是触发器,必须有一方带有刚体
双方都是触发器,或者其中一方是触发器,另一方是普通的碰撞器,都不会打印
只要一方是触发器,并且带有刚体,不管另一方是不是刚体都会打印各自的触发器方法
一般我们将触发器方法写在物体被碰到的一方

3、碰撞器与触发器的区别?

****1、****碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。

****2、****当IsTrigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

****3、****当IsTrigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

****4、****如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。

详见:

https://www.jianshu.com/p/d2cd436e2bc0

http://www.cnblogs.com/linzheng/p/3980041.html