当前位置: 首页 > news >正文

Unity基础学习(十二)核心系统—物理系统之碰撞检测组件篇(1)刚体,碰撞体,材质

目录

RigidBody组件​

1、什么是刚体?

2、刚体相关参数介绍 

Mass

Drag

Angular Drag

Use Gravity        是否受重力影响  重力加速度影响(默认9.81m/s²)

Is Kinematic

​Interpolation​

​Collision Detection​


在进入今天的主题前,请务必记住这样一句话:

碰撞产生的必要条件,两个物体都有碰撞器,至少一个物体有刚体

现在不理解没事,我们后面会反复提及的

RigidBody组件​

1、什么是刚体?

        刚体(Rigidbody)是Unity物理系统的核心组件,赋予游戏对象真实的物理行为模拟能力。其本质是一个牛顿力学模拟器,通过计算物体的质量、速度、加速度、扭矩等物理量,驱动对象在虚拟世界中的运动。就相当于是你可以在一个虚拟世界模拟现实物理世界中的物理属性的基本组件,例如重力,弹力,摩擦力。Unity中的刚体分为2D和3D,带后缀的就是2D不带的就是3D,今天我们来看看3D,相信学会了3D,2D自然就明白了。

特征3D刚体(Rigidbody)2D刚体(Rigidbody2D)
物理引擎PhysX(NVIDIA)Box2D
坐标系XYZ三轴运动 + 三维旋转XY平面运动 + Z轴旋转
适用场景三维空间物理模拟横版/俯视2D游戏

2、刚体相关参数介绍 

 

Mass

质量(默认为千克)

质量越大惯性越大

Drag

空气阻力

根据力移动对象时影响对象的空气阻力大小

0 表示没有空气阻力 =5时类似水中运动

Angular Drag

根据扭矩旋转对象时影响对象的空气阻力大小。0 表示没有空气阻力。

啥意思呢?​

        Angular Drag是控制物体旋转衰减的核心物理参数。相较于线性阻力(Drag)作用于物体的平移运动,角阻力专门对旋转运动产生制动效果。它可以理解为"旋转摩擦力",单位时间内吸收物体角速度的能量,使其旋转逐渐停止。真实世界中类似油液阻尼器的效果

Use Gravity        是否受重力影响  重力加速度影响(默认9.81m/s²)

Is Kinematic

        如果启用此选项,则对象将不会被物理引擎驱动,只能通过 (Transform) 对其进行操作。对于移动平台,或者如果要动画化附加了 HingeJoint 的刚体,此属性将非常有用。

        Is Kinematic标志位决定刚体是否参与动力学计算,其物理表现与常规刚体存在本质差异。当勾选此选项时,物体将进入"逆向物理"模式——它会主动影响其他常规刚体,但其自身运动不再受物理引擎的力/碰撞驱动。就是看你物理学存不存在了,启用这个开关就会物理学不存在啦!

​Interpolation​

插值模式:插值运算 让刚体物体移动更平滑

​None​:基础物理模拟 不应用插值运算

​Interpolate​:平滑当前帧 根据前一帧的变换来平滑变换。缓存前两个物理帧的状态数据(位置/旋转)在渲染帧间使用线性插值(Lerp)或球面插值(Slerp)

​Extrapolate​:预测下一帧 根据下一帧的估计变换来平滑变换。 基于当前速度和加速度预测下一物理帧状态

        为什么需要有插值计算呢,因为在帧更新中,如果你要到达一个地方,它管你怎么过去的,只要你过去了就行,不会考虑到你的体验感,可能会物理帧与渲染帧不同步,所以需要插值运算。

插值技术方案​

在物理计算间隙插入平滑过渡:

        记录物理引擎输出的原始位置/旋转数据

        根据插值模式选择历史或预测数据

        在渲染帧之间进行插值运算

指标NoneInterpolateExtrapolate
CPU消耗最低中等(+15%)最高(+30%)
内存占用0KB存储2帧数据存储预测数据结构
运动平滑度阶梯状连续平滑超平滑但可能抖动
延迟表现无延迟1帧延迟负延迟(预测)
适用速度范围<5 m/s5-30 m/s>30 m/s

​Collision Detection​

        碰撞检测模式:用于防止快速移动的对象穿过其它对象而不检测碰撞。啥意思呢,意思就是说,你物体,运动的太快了,可以选择不同的模式检测碰撞,为什么呢,因为不是每个对象都需要非常高精度的碰撞检测,属于是区别对待了。这里简单介绍下背景:

离散时间步长导致的穿透​

​物理计算间隔​:FixedUpdate默认0.02秒(50Hz)

​高速物体问题​:速度超过 物体尺寸 / fixedDeltaTime 时必然穿透

​工作流程​:

物理引擎计算本帧结束位置

生成从起点到终点的射线

仅检测终点处的碰撞

​Discrete​:默认离散检测 对场景中的所有其他碰撞体使用离散碰撞检测。其他碰撞体在测试碰撞时会使用离散碰撞检测。用于正常碰撞(这是默认值)

最大可检测速度 = (Collider大小) / fixedDeltaTime

 

Continuous​:高速物体专用

对动态碰撞体(具有刚体)使用离散碰撞检测
并对静态碰撞体(没有刚体)使用连续碰撞检测。
设置为连续动态 (Continuous Dynamic) 的刚体将在测试与该刚体的碰撞时使用连续碰撞检测。(此属性对物理性能有很大影响,如果没有快速对象的碰撞问题,请将其保留为 Discrete 设置)
其他刚体将使用离散碰撞检测。

工作原理:

计算运动轨迹参数方程

沿路径进行多段射线投射

找到首个碰撞点并修正位置

​触发条件​:

当前物体设为Continuous

碰撞对方至少为Discrete

数学原理:就是计算物体的运动轨迹最后达到的位置,然后判断

// 轨迹方程参数化
for (float t=0; t<=1; t+=0.1f) {Vector3 pos = startPos + velocity * t * fixedDeltaTime;if (CheckCollision(pos)) break;
}
Continuous Dynamic(双连续动态检测)性能消耗高
对设置为连续 (Continuous)和连续动态 (Continuous Dynamic)碰撞的游戏对象使用连续碰撞检测。还将对静态碰撞体(没有刚体)使用连续碰撞检测。
对于所有其他碰撞体,使用离散碰撞检测。这个检测只用于快速移动的对象。
原理:

双方轨迹预测(双重CCD)

精确动量守恒计算

子步长自适应分割

Continuous Speculative(连续推测检测)
        Continuous Speculative是Unity在物理引擎底层引入的一种优化型碰撞检测机制,其核心思想基于保守推进算法(Conservative Advancement)​。与传统的连续碰撞检测(CCD)不同,该模式通过预测性边界扩展实现碰撞预判,对刚体和碰撞体使用推测性连续碰撞检测。该方法通常比连续碰撞检测的成本更低。

要求:

当前物体模式对方物体模式生效等级
Continuous DynamicContinuous/Continuous Dynamic完全连续检测
Continuous DynamicDiscrete降级为Continuous

性能与精度关系

检测模式CPU耗时系数内存消耗适用速度范围
Discrete1x16B<25m/s
Continuous3-5x64B25-100m/s
Continuous Dynamic8-12x128B>100m/s

 小结:

Constraints 约束 对刚体运动的限制 

 

Freeze Position
有选择地停止刚体沿世界 X、Y 和 Z 轴的移动。
Freeze Rotation
有选择地停止刚体围绕局部 X、Y 和 Z 轴旋转。

简单来说,就是冻结某一个轴或者一个角度的运动

这个info就是组件的实际物理信息

 这个是物体使用的材质,暂时不用管

总结:

参数名称作用说明选项/建议值适用场景注意事项
Mass控制物体质量,影响惯性和碰撞动量建议0.1-10(kg)需要真实碰撞效果时(如保龄球与木箱)质量差超过10倍会显著影响碰撞效果
Drag线性运动阻力,降低物体移动速度0(真空)~5(水中)模拟不同介质中的运动(空气/水中)过高会导致物体难以移动
Angular Drag旋转运动阻力,抑制物体自转0.05(光滑)~1(粘滞)稳定旋转物体(如陀螺)、制作旋转衰减效果与质量成反比关系,轻物体衰减更快
Use Gravity是否受重力影响布尔开关需要自然下落时开启(如掉落物),飞行器/太空场景建议关闭关闭后需手动控制垂直方向运动
Is Kinematic切换物理驱动模式布尔开关程序控制移动的平台、需要穿透的触发器开启后仍可施加力但不会自动响应
Interpolation运动平滑算法None/Interpolate/ExtrapolateInterpolate:玩家角色;Extrapolate:高速抛射物Extrapolate可能产生位置预测误差
Collision Detection碰撞检测精度Discrete/Continuous/ContinuousDynamicContinuous:中速物体(15-30m/s);ContinuousDynamic:超高速物体(>50m/s)ContinuousDynamic消耗是Discrete的8-12倍
Constraints运动自由度限制Freeze Position/Rotation锁定Z轴用于2D游戏、限制特定方向运动冻结旋转时仍可手动施加扭矩
Info实时物理状态显示速度/角速度调试物理行为时参考仅显示信息不可编辑
Material物理材质引用PhysicMaterial调整摩擦/弹性系数时使用需要配合Collider使用

相关文章:

  • 密码学--希尔密码
  • 如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例
  • 三层交换机,单臂路由(用DHCP自动配置ip+互通+ACL
  • vue3: pdf.js 3.4.120 using javascript
  • LeetCode 513 找树左下角的值 LeetCode 112 路径总和 LeetCode106 从中序与后序遍历序列构造二叉树
  • 单片机-STM32部分:13-1、蜂鸣器
  • AI与IoT携手,精准农业未来已来
  • 接口自动化测试设计思路--设计实战
  • 【信息安全相关基础篇:了解签名与验签是什么及用途】
  • 蓝桥杯13届 卡牌
  • Dapp开发-如何开发一个dapp
  • Transformer——Q74 推导动态FFN(Dynamic FFN)的门控权重更新公式
  • 【内蒙古】《内蒙古自治区本级政务信息化建设项目预算支出标准(试行)》(内财预〔2024〕1449号)-费用标准解读系列
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景
  • 交叉类型的属性合并规则
  • 数组作为指针计算大小时的误区
  • 扩展:React 项目执行 yarn eject 后的 config 目录结构详解
  • Kotlin 内联函数(Inline Functions):性能优化与实战指南
  • CSS3 遮罩
  • 嵌入式Linux I2C驱动开发详解
  • 上海与世界|环城生态公园带是上海绿色发展新名片
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿
  • 汇源果汁发文:经营情况一切正常
  • 母亲节书单|关于生育自由的未来
  • 稳住外贸基本盘,这个中部大省出手了
  • 98年服装“厂二代”:关税压力下,我仍相信中国供应链|湃客Talk