Rigidbody刚体组件详解

article/2025/10/19 15:49:48

【组件界面】

【作用】

有刚体组件的物体受物理引擎控制,表现得像物理世界中的物体,例如受重力作用、受摩擦力推力等各种力作用、遇到墙会停下来不能穿过去。在Unity中,若某物体不带有碰撞器,仍会被穿过。碰撞器的作用在于检测空间中的两个物体是否发生重叠,刚体的作用在于使得物体表现出物理效果。

【属性】

  • Mass:质量,单位为kg,建议发生碰撞的两个物体的质量差小于100倍。(物理世界中每个物体都有质量)
  • Drag:空气阻力,0表示没有阻力,无限大则物体立即停止运动。(物理世界中的物体在空气中运动会受到空气阻力)
  • Angular Drag:角阻力,物体在旋转时受到的扭力(阻力),0表示没有扭力,无穷大物体不能使物体停止旋转。(物理世界中的物体在旋转时会受到空气阻力)
  • Use Gravity:是否使用重力,使用时物体受到重力影响(物理世界中的物体都受重力,在设计游戏时会遇到希望物体在某条件下受重力)
  • Is Kinematic:是否设为运动学刚体,如果是,物体不会受物理引擎控制(可以影响其他刚体,但不被其他刚体影响),只能通过直接设置Transform来操作它的,一般用来实现移动平台,或者带有HingeJoint的动画刚体。例如,我们希望通过脚本控制角色,但又希望触发器能检测到角色(角色和物体触碰时物体要表现出物理效果),可以将角色设置为运动学刚体。
  • Interpolate:插值,若物体在运动时抖动可以尝试修改该值。
    • None:表示不用插值
    • Interpolate:基于前一帧中物体的Transform来平滑当前帧物体的Transform
    • Extrapolate:基于预测的下一帧物体的Transform来平滑当前帧物体的Transform
  • Collision Detection:碰撞检测方式,用于防止物体移动速度过快而来不及进行碰撞检测而导致物体穿模。(例如用离散碰撞检测时,上一帧在屋外,下一帧在屋内,检测不到碰撞,而物体已经穿墙)
    • Discrete:离散碰撞检测,默认值。该物体和其他物体都使用该方式进行碰撞检测
    • Continuous:连续碰撞检测。同有刚体、碰撞器的物体碰撞时,用离散碰撞检测;同无刚体、有碰撞器的物体碰撞时,用基于扫描的连续碰撞检测。影响性能,慎用。
    • Continuous Dynamic:连续动态碰撞检测。同刚体设为连续碰撞检测、连续动态碰撞检测的物体碰撞时,用基于扫描的连续碰撞检测;同无刚体、有碰撞器的物体碰撞时,用连续碰撞检测;同其他物体碰撞时使用离散碰撞检测。一般用于快速移动的物体。
    • Continuous Speculative:连续预测碰撞检测,只能为运动学刚体设置为该模式或离散碰撞检测模式。比其他连续碰撞检测模式耗费少
  • Constraints:刚体运动的约束,可以约束物体的World Position或Local Rotation不改变

【注意】

  • 用推力和扭力改变物体的Position和Rotation时,不要再直接操作物体的Transform
  • 使用AddForce而物体不动可能是物体太重了,减小Mass
  • 物体的大小会影响碰撞计算,如果需要使用物理引擎,最好按照物体真实比例来建模
  • AddForce和Velocity在Mass很小时效果可能相同。当物体质量很大时,施加同样的力时物体移动变慢,甚至不动,而给定同样的速度时,物体移动速度不变。在物理中,有力会产生加速度,加速度引起速度变化,速度变化引起位置变化。因此,AddForce会使得物体速度越来越快,而Velocity使得物体速度恒定。
  • 使用Rigidbody.AddForce(1,0,0)或者Rigidbody.velocity=new Vector(1,0,0)想使得Cube水平移动,而Cube滚动起来,是因为Cube还受重力作用,两个方向的力会使得Cube滚起来。要水平移动,有三种方法:一是计算大小合适的力以抵消重力,二是不勾选Use Gravity,三是勾选Freeze Rotation。
  • 要在FixedUpdate中使用velocity和AddForce,其本质仍是不停地改变transform,改变极为快速微小,使得人眼看起来是在连续运动。

【特性】 

  • 睡眠:物体移动或旋转过低时,会进入睡眠模式,停止移动。物体被碰撞或受力时会被唤醒,也可通过WakeUp函数显式唤醒游戏对象。
  • 父子化:当带有刚体的物体的父物体通过Transform移动时,该物体会随着父物体移动,但同时还会受重力影响而下落。
  • 复合碰撞体:对于形状复杂的物体,这个物体可能由多个带有碰撞器的子物体组成,将这个物体设置为一个空物体的子物体,给空物体挂在刚体组件,则这个物体会成为刚体。

【拓展-连续碰撞检测】

连续碰撞检测分为基于扫描的连续碰撞检测和基于推测的连续碰撞检测。

基于扫描的连续碰撞检测(Sweep-based CCD)采用撞击时间算法。基于当前的速度和移动方向计算可能的碰撞所需时间,在到达该时间时停止运动。具体会分为多个子步骤执行:计算TOI,计算当前速度,重新扫描。这会导致使用多个CPU周期。

因为其是基于线性扫描的,所以会忽略物体的角运动。当物体旋转过快时,同样会穿过某些物体。

已启用 Continuous Dynamic 属性的细杆游戏对象。绕轴心点快速旋转时,此杆不会与球体接触。

基于推测的连续碰撞检测(Speculative CCD)采用AABB算法,可以检测出物体线性运动和角运动可能产生的碰撞,成本通常低于前者,因为只在碰撞检测阶段(而不在求解和积分阶段)计算触点。

但因为会计算所有可能的触点,会把原来不会产生碰撞的触点也算出来,导致产生幽灵碰撞(ghost collision)

在 c0 处产生的幽灵碰撞导致球体错误地向上跳跃,而不是笔直向前移动

同时,如果物体在距离碰撞处很近,受到巨大能量时,也会产生穿过物体的现象,因为碰撞处刚好不在盒子空间内。(此处不理解,请去了解AABB算法)

具有扩大的 AABB 的球体使用推测性 CCD,此算法仅在碰撞检测阶段计算触点,因此可能会发生穿过事件

【参考】

https://docs.unity3d.com/Manual/class-Rigidbody.html

Unity - Manual: Continuous collision detection (CCD) (unity3d.com)


http://chatgpt.dhexx.cn/article/gRo5UHQo.shtml

相关文章

Unity API详解——Rigidbody类

Rigidbody类的功能是用来模拟GameObject对象在现实世界中的物理特性,包括重力、阻力、质量、速度等。对RIgidbody对象属性的赋值代码通常放在脚本的OnFixedUpdate()方法中。本博客主要介绍Rigidbody类的一些实例属性和实例方法,最后对Rigidbody类中功能相…

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例

Unity 3D 中的 Rigidbody 可以为游戏对象赋予物理特性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的物理学现象。 我们通常把在外力作用下,物体的形状和大小(尺寸)保持不变,而且内部…

【Unity3D】刚体组件Rigidbody

1 前言 刚体(Rigidbody)是运动学(Kinematic)中的一个概念,指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在 Unity3D 中,刚体组件赋予了游戏对象一些运…

【Unity】11.2 刚体(Rigidbody)

分类:Unity、C#、VS2015 创建日期:2016-05-02 一、简介 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力,使游戏对象像在真实世界中那样进行运动。 任何游戏对象&…

【Physics】一、Rigidbody 刚体

文章目录 1、刚体组件2、刚体脚本2.1、获取刚体2.2、添加力2.3、Move 点击访问官网 物理系统 、刚体概述 、 刚体 (Rigidbody) 1、刚体组件 刚体 (Rigidbody) 使游戏对象的行为方式受物理控制。刚体可以接受力和扭矩,使对象以逼真的方式移动。任何游戏对象都必须包…

Unity物理组件之刚体Rigidbody

一、刚体组件简介 1、刚体简介 刚体:Rigidbody,属于物理类组件 作用:添加了刚体组件的游戏物体,可以在物体系统的控制下来运动,刚体可接受外力和扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体…

【Untiy学习笔记】Rigidbody组件及其常用函数

前言 提示:声明:此篇文章是个人学习笔记,并非教程,所以内容可能不够严谨。可作参考,但不保证绝对正确。如果你发现我的文章有什么错误,非常欢迎指正,谢谢哦。 本文大部分内容来自官方文档&…

mac快速锁屏方法

方法一. 快捷键:controlcommandQ。 方法二. 点击左上角apple logo,锁定屏幕。 方法三(快捷方便). 系统偏好设置->调度中心->触发角->选一个角(左上、左下、右上、右下)->锁定屏幕或者将显示器…

mac修改cmd+ctrl+q锁定屏幕快捷键

mac里的cmdctrlq快捷键是系统快捷键,用作“锁定屏幕”: 这个快捷键优先级很高,导致无法设置其为其他应用快捷键(如qq)。 下面的方法可以把“锁定屏幕”改成其他快捷键,从而腾出cmdctrlq来给应用程序&#…

mac 设置mysql登录快捷键_史上最详细的苹果Macbook快捷键使用

电脑快捷键可以帮助你提高工作效率,是使用电脑过程中经常用到的,苹果电脑的快捷键和普通PC不太一样,对于新手来说,经常找不到或不知道快捷键是什么,经常要去查,所以这边系统城小编跟大家介绍macbook快捷键的…

Mac提高效率的快捷键

分享常用的一些快捷键,欢迎补充,一起提高办公效率 目录 常用按键介绍系统管理关机和睡眠偏好设置触摸板、键盘和鼠标 窗口管理(最小化、关闭、退出)目录(文件夹)文本和文件操作撤销、重做复制、剪切全选查找…

mac系统修改锁屏快捷键

mac 自带了锁屏的快捷键,我忘了是什么了,点击屏幕左上角的苹果图标,就能看到。反正比较麻烦,没windows下方便,。 习惯了在windows下,按winL键来锁屏。在mac下,怎么改成commandL来锁屏呢? 方法…

macbook 常用键盘快捷键大全 mac os 苹果电脑

为了让刚开始使用 Mac 的新手更快地上手,特整理了这一份“最值得你记住的 Mac 常用快捷键列表”,希望可以帮助到大家更快地学习和查找 macOS 的键盘快捷键,以此提高 Mac 的操作效率…… 与 Windows 的差异 一切开始前,我们先来认识…

mac键盘快捷键大全

macos下都有哪些Mac 键盘快捷键呢?不少果粉抱怨高上大的macbook不好用,相比于之前习惯了Windows操作的用户们,转战到mac的阵营还真是会觉得不大习惯呢。觉得不好用的朋友很可能就在于你不知道mac的这些快捷键呐,下文小编就为大家整理好mac的一些常用快捷键,需要的朋友快去…

MacOS VSCode 常用快捷键配置

📌 2023-03-28 更新 VSCode 回到上一步光标位置 (macOS)默认快捷键: 回退上一次编辑:ctrl - 跳转下一次编辑位置:ctl shift - (建议修改)修改快捷键: 快捷键中搜索…

MAC OS常用快捷键一览

切换输入法:Cmd Space 截屏:Shift Cmd 3 部分截屏:Shift + Cmd + 4 屏幕反色快捷键:Option + Cmd + F5 (需要勾选反色选项) 复制/剪切/粘贴/全选&#xff…

Mac 键盘快捷键

Mac 键盘快捷键 您可以按下某些组合键来实现通常需要鼠标、触控板或其他输入设备才能完成的操作。 要使用键盘快捷键,请按住一个或多个修饰键,然后按快捷键的最后一个键。例如,要使用 Command-C(拷贝),请按住 Command 键并按 C 键,然后同时松开这两个键。Mac 菜单和键…

苹果mac休眠快捷键_Mac电脑睡眠、退出登录和关机快捷键有哪些?技巧来啦!

有很多刚开始使用,甚至一些使用了很久Mac系统的人,可能不知道关机快捷键,只能通过点击屏幕左上角的苹果,然后选择其中的“关机”(Shut Down),然后在弹出的对话框中点击确认,才能实现整个关机的过程&#xf…

mac的快捷键(日常使用)

文章目录 1. 官方所有的快捷键1.1 剪切、拷贝、粘贴和其他常用快捷键1.2 睡眠、退出登录和关机快捷键1.3 访达和系统快捷键1.4 启动快捷键 2. 我日常使用的2.1 在访达中快速定位文件2.2 快速新建窗口2.3 其他 3. 常用软件快捷键3.1 word3.2 mac录屏3.3 重置应用3.4 hosts文件问…

苹果锁定计算机的快捷键,苹果电脑快捷键使用 Mac快捷键大全详细介绍

相信有很多刚开始使用苹果电脑操作系统的用户,都并不了解整个MAC操作系统,就连一般快捷键的使用都不清楚,这让人很感觉很苦恼。下面,小编就来向大家分享一下Mac快捷键大全的详细介绍,记住这些常用的快捷键,…