目录

物理引擎

# 物理引擎

游戏中模仿现实情况下物体运动规则的引擎

# Rigidbody组件

又名刚体,赋予物体现实中物理规则。但光有刚体不行,当执行游戏时,刚体物体在运动轨迹上没有受体阻拦就会一直往下坠。因此我们还需要受体才能模拟真实的物理运动情况。

# 属性
  • Mass: 重量,游戏策划应当统一单位
  • Drag: 阻力,空气阻力,摩擦力... 通常砖头0.001,羽毛10
  • Angular Drag: 角阻力,旋转时的阻力
  • Interpolate: 用于缓解刚体运动时的抖动
    • 内插值 Interpolate - 基于上一帧的变换来平滑该帧
    • 外插值 Extrapolate - 基于下一帧的变化来平滑该帧
  • Collision Detection: 碰撞检测模式,快速移动的刚体在碰撞时有可能互相穿透,可以设置碰撞检测频率,但过高频率影响性能
    • 不连续 Discrete: 不连续碰撞检测,适用于普通模式
    • 连续 Continuous: 连续碰撞检测
    • 动态连续 Continuous Dynamic: 连续动态碰撞检测,适用于高速物体
  • Constraints: 对刚体运动的约束
    • 冻结位置 Freeze Position: 刚体在世界中沿所选X,Y,Z轴的移动将无效
    • 冻结选择 Freeze Rotation: 刚体在世界中沿所选的X,Y,Z轴的旋转无效
  • IsGravity: 是否受重力影响,模拟太空可能用到

# Collider组件

又名受体,赋予物体接触刚体的能力

在Unity中,提供了许多Collider

  • Box Collider
  • Capsule Collider
  • Circle Collider 2D
  • Mesh Collider
  • Sphere Collider
  • Terrain Collider
  • Wheel Collider

这些碰撞器除了形状不同,我们还需要考虑其性能,因为往往场景里会有许许多多的静态物体,而他们为了与角色产生反应,必须被赋予Collider,一旦数量庞大可能会影响性能,这点在手游中尤为明显,在手游中的规则是,能用Box Collider就尽量用,可以减少性能消耗

  • IsTrigger:勾选后,勾选的物体将不再受到碰撞(其他物体可从他这里穿过去),物体将不再触发OnCollisionXXX事件,而是触发OnTriggerXXX事件

# 碰撞阶段

  • 当进入碰撞时执行(接触的第一帧)
    • void OnCollisionEnter(Collision collOther)
  • 当Collider与Rigidbody碰撞时(接触时,每一帧)
    • void OnCollisionStay(Collision collOther)
  • 当停止碰撞时执行(接触时的最后一帧)
    • void OnCollisionExit(Collision collOther)
# 补充

上面的事件中参数Collision可以通过collOther.gameObject获取触碰物体的对象

还可以通过collOther.GetContact(index)获取接触点,可以用于判断受击打的部位以及溅血特效

有时我们想模拟子弹射击速度时,子弹往往会因为速度过快导致无法被检测,解决方案是开始时使用射线进行检测。

# 物理材质

最近更新
01
基本知识
07-18
02
卷积神经网络识别图像
07-18
03
损失函数
07-18
更多文章>