unity学习 —— 物理系统之Rigidbody admin 2023-02-20 18:51:02 篇首语:本文由小编为大家整理,主要介绍了unity学习 —— 物理系统之Rigidbody相关的知识,希望对你有一定的参考价值。 RigidbodyRigidbodies允许你的 GameObject在物理的控制下行动。Rigidbody可以接收力和力矩来让你的物体真实地移动。每个包含 Rigidbody的 GameObject都会受到重力的影响,在你脚本施加的力下运动,或通过 NVIDIA PhysX物理引擎与其他物体交互。属性PS:带 - 的为上一行属性的选项介绍属性功能质量(Mass)物体的质量(单位默认为 千克)。空气阻力(Drag)物体在移动时受到多少空气阻力影响。0:没有空气阻力,无穷:物体立即停止运动。角阻力(Angular Drag)在因力矩旋转时受到多少空气阻力。0:无空气阻力,无穷:物体停止转动。使用重力(Use Gravity)如果允许,物体会受到重力影响。Is Kinematic如果允许,物体将不再由物理引擎驱动,且只能通过 Transform操作。Interpolate只有当你在 Rigidbody移动中看见 jerkiness,再去尝试其中的选项。- None不应用Interpolate- Interpolate在上一帧的 Transform的基础上对 Transform进行平滑处理。- Extrapolate在下一帧预估的 Transform的基础上对 Transform进行平滑处理。碰撞检测被用于防止移动过快的物体穿过其他物体而没有检测到碰撞。- 离散(Discrete)对场景中所有其他碰撞物使用离散碰撞检测。其他碰撞物会用离散碰撞检测测试与它的碰撞。用于正常碰撞(默认值)。- 持续(Continuous)对动态碰撞物(有 Rigidbody)使用离散碰撞检测,对静态碰撞物(没有 Rigidbody)使用基于扫描(sweep-based)的连续碰撞检测。动态连续(Coutinuous Dynamic)设置的 Rigidbodies将会使用连续碰撞检测来对此 rigidbody进行碰撞检测。 其他 rigidbodies使用离散碰撞检测。 用于连续碰撞检测需要碰撞的物体。(这对物理性能有很大影响,如果对速度快的物体的碰撞没有问题,尽量设置为离散(Discrete))- 动态连续(Continuous Dynamic)对设置了连续和连续动态碰撞的 GameObject使用基于扫描的连续碰撞检测。它同样会对静态 Colliders使用连续碰撞检测。对其他碰撞物使用离散碰撞检测。用于移动速度快的物体。- 推测连续(Continuous Speculative)对 Rigidbodies 和 Colliders使用推测连续碰撞检测。这是你可以设置 kinematic bodies的唯一的 CCD模式。这个方法比基于扫描的连续碰撞检测的开销大。Constraints限制 Rigidbody的运动- Freeze Position停止 Rigidbody在 X, Y, Z(可选)轴上的运动。- Freeze Rotation停止 Rigidbody在 X,Y,Z(可选)轴上的旋转。细节Rigidbodies允许你的 GameObjects在物理引擎的控制下行动。通过为你的GameObjects添加力到Rigidbody能够产生不同的感觉,且看上去就像是在调整你的 Transform组件。一般来说,你不应该操作同一GameObject的Rigidbody和Transform。操作Transform和Rigidbody的最大区别就是是否使用力。Rigidbodies能接受力和力矩,但是Transform不能。Transform能被平移和旋转,但是这跟使用物理不同。添加力/力矩到Rigidbody实际上将会改变物体的Transform组件的position和rotation。因此你只能使用两者之一。在使用物理的时候改变Transform会造成碰撞和其他计算问题。Rigidbodies在被物理引擎影响之前,必须显式添加给你的GameObject。你可以在菜单 Components->Physics->Rigidbody为你选择的物体添加 Rigidbody。现在你的物体已经能在重力的影响下下落,且可以通过脚本添加力了。脚本你可以通过 AddForce()和 AddTorque在物体的 Rigidbody上添加力和力矩。动画对于大多数情景(主要是ragdoll效应),在动画和物理之间切换物体的控制权是必要的。为了达到这个目的,Rigidbodies能被标记为 isKinematic。当 Rigidbody被标记为 isKinematic,它将不再被碰撞,力,或物理系统的其他模块所影响。这意味着你必须通过直接操作Transform组件来控制物体。Kinematic Rigidbodies将会影响其他物体,但是它们自身不会被物理影响。Colliders为了允许撞击发生,Colliders 是必须要添加到 Rigidbody的另一种组件。如果两个 Rigidbodies相互碰撞,除非每个物体都有一个 Collider关联,否则物理引擎将不会计算碰撞。在物理仿真期间,无 Collider的Rigidbodies只是会简单地穿过彼此。复合 Colliders(Compound Colliders)复合 Colliders是基本 Colliders的组合,且像单 Rigidbody一样行动。当你有一个复杂模型,且想要使用简单的估算来模拟碰撞形状时,它就能够派上用场。为了创建一个复合 Collider,首先生成你的碰撞对象的子对象,然后为每个子对象添加 Collider组件。上图中,枪模型有一个 Rigidbody相关联以及多个基本 Colliders作为子 GameObject。当母 Rigidbody受力移动时,子 Colliders也会一起移动。基本 Colliders将会与环境中的 Mesh Collider碰撞,且母 Rigidbody将会改变它的移动方式,这个移动方式是基于 力 以及 子Colliders是如何与场景中的其他Colliders相互影响的。Mesh Colliders是不能正常相互碰撞的。如果 Mesh Collider被标记为凸(Convex),那么它就能与其他 Mesh Collider碰撞。典型的解决方法是为移动的物体使用基本 Colliders,为静态背景物体使用 Mesh Collider。使用正确的大小你的 GameObejct网格大小远比Rigidbody 的质量(mass)要重要。如果你发现你的 Rigidbody的行为并没有按照预期发生:移动慢,浮动,或错误地碰撞,就可以考虑下调整你的 mesh asset的规模。Unity默认单位规模是 1 unit = 1 meter,因此你的输入网格的规模是维持的,且被应用于物理计算。比如说,一个摇摇欲坠的摩天大楼崩塌方式与积木搭成的塔是不一样的,所以不同大小的物体应该以精确规模建模。如果你要在 Unity中构建2米高的人物模型,记得检查你的对象有正确的尺寸。你可以使用 GameObject > 3D Object > Cube的方式创建一个立方体,它的高是精确的1米,所以你的人物应该是它的两倍。如果你无法调整网格自身,可以在 Project视图中选中它,并在菜单栏选中 Asset->Import Setting,就可以改变一个特殊网格的统一规模了。 以上是关于unity学习 —— 物理系统之Rigidbody的主要内容,如果未能解决你的问题,请参考以下文章 [转]Nginx负载均衡原理初解 sql 如何使用SQL确定字符串的长度? 您可能还会对下面的文章感兴趣: 相关文章 浏览器打不开网址提示“ERR_CONNECTION_TIMED_OUT”错误代码的解决方法 如何安装ocx控件 VMware的虚拟机为啥ip地址老是自动变化 vbyone和EDP区别 linux/debian到底怎么重启和关机 苹果平板键盘被弄到上方去了,如何调回正常? 机器学习常用距离度量 如何查看kindle型号