Unity的PhysX物理引擎

Rigidbodies 刚体
刚体是物理模拟物体。
游戏物体控制刚体,由物理控制行为。刚体可以接受力和扭矩以是物体以真实的行为移动。任何游戏物体必须包含刚体组件,以使受重力影响,通过脚本添加力产生行为,或与其他物体通过NVIDIA PhysX物理引擎交互。

  • 不应该父子同时具有刚体
  • 不应该缩放刚体的父级

运动学刚体是isKinematic选项启用的刚体。运动学刚体不受力,重力或碰撞影响。它们通过设置变换或动画的位置和旋转显式驱动,它们仍然可以与其他非运动学刚体互动。

  • 当运动学刚体与其他刚体碰撞时,会将其他刚体唤醒,并且有碰撞摩擦力
  • 让一个移动的物体可以推动别的物体但是自己不会被推动, 比如一个平台,那就应该设置平台为运动学刚体而不仅是不加刚体的碰撞器。

Character Controllers 角色控制器

刚体
  • Mass 质量
    物体的质量(任意单位,一般是kg)。建议一个物体的质量不要多于或少于其他单位的100倍。
  • Drag 阻力
    当受力移动时物体受到的空气阻力。0表示没有空气阻力,极大时使物体立即停止运动。
  • Angular Drag 角阻力
    当受扭力旋转时物体受到的空气阻力。0表示没有空气阻力,极大时使物体立即停止旋转。
  • Use Gravity 使用重力
    若激活,则物体受重力影响。
  • Is Kinematic 是否是运动学
    若激活,该物体不再受物理引擎驱动,而只能通过变换来操作。适用于模拟运动的平台或者模拟受铰链关节连接的刚体。
  • Interpolate 插值
    当你发现刚体运动时抖动,可以尝试下面的选项。
  •     None 无
    不应用插值。
  •     Interpolate 内插值
    基于上一帧的变换来平滑本帧变换。
  •     Extrapolate 外插值
    基于下一帧的预估变换来平滑本帧变换。

阻力越大,物体看起来越轻,阻力越小,物体看起来越重。

Colliders 碰撞器

Mesh(网格)碰撞器之间通常不相互碰撞,但如果一个网格碰撞器被标记为Convex(凸体),那么它就可以与其他网格碰撞器碰撞。典型的解决方案是,对移动的对象使用基本碰撞器,而对静态环境对象使用网格碰撞器。

网格碰撞器的最佳适用地方是不规则形状的地形或环境,对于其他对象,用基本碰撞体组成碰撞器就好

要给一个对象添加多个碰撞器,应该创建子对象并给每个子对象添加一个碰撞器。这使每个碰撞器可以被单独操作。
可以通过场景视图(Scene View )中的线框(gizmos)来查看碰撞器在你的对象上的预期效果。
如果你想接收通过Transform组件移动的对象的碰撞/触发信息,你必须给移动对象附加刚体。


Triggers 触发器
注意:触发器间可以碰撞
无论是碰撞还是触发,条件都是其中一方要有刚体


Static Colliders 静态碰撞器
一个静态碰撞器是一个包含碰撞器但不含刚体的游戏对象。静态碰撞器用于总是待在同一个地方不移动的水平几何体。

  • 不要逐帧移动 一个静态碰撞器,移动静态碰撞器将导致PhysX引擎的内部重置,非常耗费资源,而且会造成性能的极大下降。
  • 另外,基于一个静态碰撞器唤醒其他刚体的行为 是未定义的,而且移动静态碰撞器将不会对碰到它的刚体施加摩擦力。取而代之的是,要移动的碰撞器要保持是运动学刚体。
Rigidbody Collider 刚体碰撞器
与静态碰撞器相反,指的是同时附加了刚体和碰撞器的游戏对象。

Kinematic Rigidbody Collider 运动学刚体碰撞器
要移动这类游戏对象,要修改它的Transform组件,而不是用力。

Collision action matrix 碰撞行为矩阵
Collision 碰撞后有碰撞检测并有碰撞信息发出矩阵
Trigger 碰撞后有触发信息矩阵
Layer-Based Collision Detection 基于层的碰撞检测
暂略

Constant Force 恒力
  • 要使物体向上飘动,沿正Y轴添加一个恒力( 在世界空间应用的向量力)。
  • 要使物体向前飞翔,沿正Z轴添加一个相对恒力( 在物体的局部空间应用的向量力)。

刚体睡眠

所以如果你想使进入睡眠,那么在他们将要进入休眠模式时不要更改他们的属性或者添加任何外力。

你可以 调节两个变量来确保刚体自动进入睡眠,这两个变量是:Rigidbody.sleepVelocity和Rigidbody.sleepAngularVelocity。这两个变量的初始值即分别为物理管理器中的sleepVelocity和sleepAngularVelocity的值(编辑->项目设置->物理)。

当然还可以通过 rigidbody.Sleep强制使刚体睡眠。当加载新的关卡时,从睡眠状态启动刚体,对整个系统很有帮组。

处于运动状态中的刚体能唤醒休眠中的刚体。静态碰撞器不能唤醒休眠中的刚体。即如果你将一个静态碰撞器(没有和任何刚体绑定过)绑定到处于休眠中的刚体,或者将静态碰撞器抽离处于休眠中的刚体时,这个休眠中的刚体是不会被唤醒的。但是如果你将一个运动中的刚体从它所属的且处于休眠状态中的顶层刚体移出时,处于休眠中的刚体将会被唤醒,且会在图形更新里被重新正确的计算。所以如果你有大量的静态碰撞器需要移除或添加,同时在它们上面正确地绑定不同的对象,就请使用运动刚体控制器吧。

如果运动刚体不进行运动,那么它们将不在物体更新时参与计算。如果你将一个运动中的刚体从它所属的且处于休眠状态中的顶层刚体移出时,处于休眠中的那个刚体将会被唤醒,且会在图形更新里被重新正确的计算。所以如果你有大量的静态碰撞器需要移除或添加,同时在它们上面正确地绑定不同的对象,就请使用运动刚体控制器吧。

PhysicMaterial
是附加的基本物理参数,是一个物理材质,UNITY3D有自带默认的物理材质的系数(在Edit/Project Settings/Physic下设置)

  • Dynamic Friction 滑动摩擦力
    当物体移动时的摩擦力。通常为0到1之间的值。值为0的效果像冰,而设为1时,物体运动将很快停止,除非有很大的外力或重力来推动它。
  • Static Friction 静摩擦力
    当物体在表面静止的摩擦力。通常为0到1之间的值。当值为0时,效果像冰,当值为1时,使物体移动十分困难。
  • Bouncyness 弹力
    表面的弹力。值为0时不发生反弹。值为1时反弹不损耗任何能量。
  • Friction Combine Mode
    摩擦力组合方式
    定义两个碰撞物体的摩擦力如何相互作用。
  •     Average 平均
    使用两个摩擦力的均值。
  •     Min 最小值
    最小值。使用两个值中最小的一个。
  •     Max 最大值
    最大值,使用两个值中最大的一个。
  •     Multiply 相乘
    相乘。使用两个摩擦力的乘积。
  • Bounce Combine 反弹组合
    定义两个相互碰撞的物体的相互反弹模式,它的模式种类和相互摩擦力模式一样。

翻译自文档:
静摩擦力在物体静止时生效,它阻止物体开始运动。而当外力够大时物体开始运动,这时滑动摩擦力将生效,它尝试使物体变慢,当其与其他物体接触时。

最好为角色定制一个PhysicMaterial

当两个物体接触,振动和摩擦方式单独应用到每个PhysicMaterial 。因此,当A的摩擦力组合模式为Average,B为Multiply,那么A受到Average摩擦力,B受到Multiply摩擦力

请注意,NVIDIA PhysX引擎使用摩擦模型是针对性能和稳定性的模拟,不一定存在现实世界的物理近似。特别是,大于单个点的接触表面(例如两个相互依靠的盒子)将被计算为具有两个接触点,并且它们的摩擦力是真实世界物理学中的两倍。在这种情况下,您可能希望将摩擦系数乘以0.5,以获得更真实的结果。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值