Unity 物理系统--碰撞、触发

2020-10-16 13:42发布

1、Box Collider:盒碰撞体,盒碰撞体是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可用作门、墙、以及平台等

面板属性如下:

Is Trigger:触发器,勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略

Material:材质

Center:中心,碰撞体在对象局部坐标中的位置

Size:大小,碰撞体再X、Y、Z方向上的大小


2、Sphere Collider:球形碰撞体,球形碰撞体是一个基于球体的基本碰撞体,球体碰撞体的三维大小可以均匀等地调节,但不能单独调节某个坐标轴方向的大小

Radius:半径,球形碰撞体的大小


3、Capsule Collider:胶囊碰撞体,胶囊碰撞体由一个圆柱体和与其相连的两个半球体组成,是一个胶囊形状的基本碰撞体,胶囊碰撞体的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用

Height:高度,该项用于控制碰撞体中圆柱的高度

Direction:方向,在对象的局部坐标中胶囊的纵向方向所对应的坐标轴,默认是Y轴


4、Mesh Collider:网格碰撞体,网格碰撞体通过获取网格对象并在其基础上构建碰撞,在与复杂网格模型上使用基本碰撞相比,网格碰撞体要更加精细,但会占用更多地系统资源


Smooth Sphere Collisions:平滑碰撞,在勾选该项后碰撞会变得平滑

Mesh:网格,获取游戏对象的网格并将其作为碰撞体

Convex:凸起,勾选该项,则网格碰撞体将会与其他的网格碰撞体发生碰撞

Wheel Collider:车轮碰撞体,车轮碰撞体是一种针对地面车辆的特殊碰撞体,它有内置的碰撞检测、车轮物理系统以及滑胎摩擦的参考体

Suspension Distance:悬挂距离,该项用于设置车轮碰撞体悬挂的最大伸长距离,按照局部坐标来计算,悬挂总是通过其局部坐标的Y轴延伸向下

Center:中心,该项用于设置车轮碰撞体在对象局部坐标的中心

Suspension Spring:悬挂弹簧,该项用于设置车轮碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置

Forward Friction:向前摩擦力,当轮胎向前滚动时的摩擦力属性

Sideways Friction:侧向摩擦力,当轮胎侧向滚动时的摩擦力属性


6、character controller组件属性

Character Controller,角色控制器,角色控制器主要用于对第三人称或第一人称游戏主角的控制,并不使用刚体物理效果

Slope Limit:坡度限制,该项用于设置所控制的角色对象只能爬上小于或等于该参数值的斜坡

Step Offset:台阶高度,该项用于设置所控制的角色对象可以迈上的最高台阶的高度

Skin Width:皮肤厚度,该参数决定了两个碰撞体可以相互渗入的深度,较大的参数值会产生抖动的现象,较少的参数值会导致所控制的游戏对象被卡住,较为合理地设定上是:该参数值为Radius值的10%

Min Move Distance:最小移动距离,如果所控制的角色对象的移动距离小于该值,则游戏对象将不会移动

Center:中心,该参数决定了胶囊碰撞体再世界坐标中得位置,

Radius:半径,胶囊碰撞体的长度半径,

Height:高度,该项用于设置所控制的角色对象的胶囊碰撞体的高度


碰撞与触发分别对应的三种函数方法

系统默认会给每个对象(GameObject)添加一个碰撞组件。而在Unity中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛,为了完整的了解这两种方式,我们必须理解以下概念:

1、碰撞器是一群组件,它包含了很多种类,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。

2、所谓触发器,只需要在Inspector检视面板中的碰撞器组件中勾选IsTrigger属性选择框。

3、在Unity中,主要有以下接口函数来处理这两种碰撞检测:

触发信息检测:

1、MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器

2、MonoBehaviour.OnTriggerExit( Collider other )当退出触发器

3、MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器

碰撞信息检测:

1、MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器

2、MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器

3、MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 当逗留碰撞器


碰撞检测条件:

1- 都有Collider

2- 必须要在挂脚本的物体上有Rigidbody

3- Collider上都不勾选Is Trigger

触发检测条件:

1- 都有Collider

2- 必须要在挂脚本的物体上有Rigidbody

3- 所挂脚本物体勾选Is Trigger (有一个勾选了就可以)


public class collider : MonoBehaviour {

 

    //--------------碰撞器--------------

    private void OnCollisionEnter(Collision collision)

    {   //打印碰撞到物体的名称

        Debug.Log(collision.gameObject.name);      

        //获取碰撞到物体的Render组件并且更改其材质球颜色

        collision.gameObject.GetComponent<Renderer>().material.color = Color.red;

    }

    private void OnCollisionStay(Collision collision)

    {

        Debug.Log(collision.gameObject.name);

        collision.gameObject.GetComponent<Renderer>().material.color = Color.blue;

    }

    private void OnCollisionExit(Collision collision)

    {

        Debug.Log(collision.gameObject.name);

        collision.gameObject.GetComponent<Renderer>().material.color = Color.green;

    }

    

    //--------------触发器--------------  勾选isTrgger  

    private void OnTriggerEnter(Collider other)

    {

        //打印引起触发的物体名称

        Debug.Log(other.name);

        //改变自己的颜色

        GetComponent<Renderer>().material.color = Color.red;

    }

    private void OnTriggerStay(Collider other)

    {

        GetComponent<Renderer>().material.color = Color.blue;

    }

    private void OnTriggerExit(Collider other)

    {

        GetComponent<Renderer>().material.color = Color.green;

    }

}




作者:Czhenya

链接:https://czhenya.blog.csdn.net/article/details/77198031

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。