刚体

简介

  • 带有刚体组件的游戏物体。
    add Compoment-physics-Rigidbody
  • 刚体组件可使游戏对象受物理引擎控制,在受到外力时产生真实世界中的运动。
  • 物理引擎:模拟真实世界中物体物理特性的引擎。

属性

rigidbody面板.png

  • 质量 Mass:物体的质量。
  • 阻力 Drag:当受力移动时物体受到的空气阻力。
    0表示没有空气阻力。极大时可使物体停止运动,通常砖头0.001,羽毛设置为10。
  • 角阻力 Angular Drag:当受扭力旋转时物体受到的空气阻力。
    0表示没有空气阻力,极大时使物体停止旋转。
  • 使用重力 Use Gravity:若激活,则物体受重力影响。
  • 是否是运动学Is Kinematic:若激活,该物体不再受物理引擎控制,而只能通过变换组件来操作。
  • 插值Interpolate:用于缓解刚体运动时的抖动。
    • 无 None :不应用插值。
    • 内插值 Interpolate :基于上一帧的变换来平滑本帧变换。
    • 外插值 Extrapolate :基于下一帧的预估变换来平滑本帧变换。
  • 碰撞检测 Collision Detection:碰撞检测模式。快速移动的刚体在碰撞时有可能互相穿透,可以设置碰撞检测频率,但频率越高对物理引擎性能影响越大。
    • 不连续 Discrete:不连续碰撞检测。适用于普通碰撞(默认模式)。
    • 连续 Continuous:连续碰撞检测。
    • 动态连续 Continuous Dynamic:连续动态碰撞检测,适用于高速物体。
  • 约束 Constraints:对刚体运动的约束。
    • 冻结位置 Freeze Position:刚体在世界中沿所选X,Y,Z轴的移动,将无效。
    • 冻结旋转 Freeze Rotation:刚体在世界中沿所选的X,Y,Z轴的旋转,将无效。

碰撞器

简介

  • 使刚体具有碰撞效果。
  • 可以单独作用于物体,但是要使移动的物体具有碰撞效果,必须附加刚体组件。

    分类

  • 静态碰撞器 Static Collider :只有碰撞器没有刚体的物体
    现象:保持静止或者轻微移动,如:平面/树木。
  • 刚体碰撞器 Rigidbody Collider:具有刚体和碰撞器的物体;
    现象:完全受物理引擎影响。
  • 运动学刚体碰撞器:带刚体,且勾选Is Kinematic。
    此碰撞器不能添加力,只能通过transform移动。

    属性

    碰撞器面板.png

  • 是否触发器 Is Trigger:如激活,此碰撞器用于触发事件,并且被物理引擎忽略。
  • 材质 Material:引用何种物理材质决定了它和其它对象如何作用。
  • 凸起的Convex:不激活则网格碰撞器间没有碰撞效果;
  • Mesh网格:用于碰撞所引用的网格。

    碰撞条件

  • 两者具有碰撞组件。
  • 运动的物体具有刚体组件。

    碰撞三阶段

  • 当进入碰撞时执行
    void OnCollisionEnter(Collision collOther)
  • 当碰撞体与刚体接触时每帧执行
    void OnCollisionStay(Collision collOther)
  • 当停止碰撞时执行
    void OnCollisionExit(Collision collOther)

    Collision参数

    事件参数类

  • 获取对方碰撞器组件
    other.cllider.getCompontent<?>();
  • 获取接触点
    CotactPoint cp = other.contacts[0];
  • 获取接触点世界坐标
    Vector3 p = cp.point;
  • 获取接触面法线
    Vector3 v = cp.normal;

触发器

简介

触发器.png

  • 带有碰撞器组件,且Is Trigger属性被勾选的物体。
  • 现象:无碰撞效果。

    触发条件

  • 两者具有碰撞组件
  • 其中至少一个带有刚体组件。
  • 其中至少一个勾选isTrigger。

    触发三阶段

  • 当Collider(碰撞体)进入触发器时执行。
    void OnTriggerEnter(Collider cldOther)
  • 当碰撞体与触发器接触时每帧执行。
    void OntriggerStay(Collider cldOther)
  • 当停止触发器时执行
    void OnTriggerExit(Collider cldOther)
最后修改:2020 年 01 月 21 日
如果觉得我的文章对你有用,请随意赞赏