当前位置: 首页 > 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使用
http://www.xdnf.cn/news/411031.html

相关文章:

  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--程序启动界面
  • 深入掌握CSS Flex布局:从原理到实战
  • 数组作为指针计算大小时的误区
  • Android13 wifi设置关闭后断电重启会自动打开
  • JGEW-9液位流量压力温度实验装置
  • Genspark超级智能体调研
  • 从数据到洞察:解析结构化数据处理的智能跃迁
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • 免费多线程下载工具
  • 电商物流的“速度与激情”:从城际运输到即时配送的全链路解析
  • 动态网站 LNMP
  • 每日Prompt:超现实交互场景
  • 全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
  • 开关电源滤波器讲解
  • Cursor 配置 Browser MCP(基于浏览器底层协议控制)及浏览器插件安装
  • Blender 入门教程(一):模型创建
  • rust 全栈应用框架dioxus server
  • 大模型数据分析破局之路20250512
  • 架构、构架、结构、框架之间有什么区别?|系统设计|系统建模
  • 互联网大厂Java面试实战:Spring Boot到微服务的技术问答解析
  • Datawhale AI春训营 day
  • 基于ESP32的健康智能机器人
  • 23.(vue3.x+vite)引入组件并动态切换(component)
  • 嵌入式Linux I2C驱动开发详解
  • 火山RTC 6 自定义视频
  • BUUCTF——杂项渗透之look
  • 代理IP:电商与营销领域的“隐形加速器”
  • OpenCV实现一个视频播放器
  • 基于FastAPI框架的日志模块设计
  • 2025年网站安全防御全解析:应对DDoS与CC攻击的智能策略