Unity--物理系统(碰撞检测)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

文章来源:
【唐老狮】Unity——物理系统(碰撞检测) - 哔哩哔哩 (bilibili.com)
发生碰撞、有物理效果、触发可穿透、不同阶段

一、碰撞检测

碰撞发生必要条件:2个都有碰撞器,1个有刚体

1.1 刚体组件

让物体有物理作用

刚体参数

在这里插入图片描述

Mass:对象的质量(默认为千克)

Drag:空气阻力
根据力移动对象时影响对象的空气阻力大小。0 表示没有空气阻力,无穷大使对象立即停止移动

Angular Drag:扭矩阻力
根据扭矩旋转对象时影响对象的空气阻力大小。0 表示没有空气阻力。请注意,如果直接将对象的 Angular Drag 属性设置为无穷大,无法使对象停止旋转。

Use Gravity:是否使用重力

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

Interpolate:仅当在刚体运动中看到急动时才尝试使用提供的选项之一。

  • None:不应用插值。
  • Interpolate:根据前一帧的变换来平滑变换。
  • Extrapolate:根据下一帧的估计变换来平滑变换。

Collision Detection:用于防止快速移动的对象穿过其他对象而不检测碰撞。

  • Discrete
    对场景中的所有其他碰撞体使用离散碰撞检测。其他碰撞体在测试碰撞时会使用离散碰撞检测。用于正常碰撞(这是默认值)。
  • Continuous
    对动态碰撞体(具有刚体)使用离散碰撞检测,并对静态碰撞体(没有刚体)使用基于扫掠的连续碰撞检测。设置为_连续动态 (Continuous Dynamic) 的刚体将在测试与该刚体的碰撞时使用连续碰撞检测。其他刚体将使用离散碰撞检测。用于连续动态 (Continuous Dynamic) 检测需要碰撞的对象。(此属性对物理性能有很大影响,如果没有快速对象的碰撞问题,请将其保留为 Discrete 设置)
  • Continuous Dynamic
    对设置为连续 (Continuous)和连续动态 (Continuous Dynamic)碰撞的游戏对象使用基于扫掠的连续碰撞检测。还将对静态碰撞体(没有刚体)使用连续碰撞检测。对于所有其他碰撞体,使用离散碰撞检测。用于快速移动的对象。
  • Continuous Speculative
    对刚体和碰撞体使用推测性连续碰撞检测。这也是可以设置运动物体的唯一 CCD 模式。该方法通常比基于扫掠的连续碰撞检测的成本更低。

Constraints:冻结。对刚体运动的限制。

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

1.2 碰撞器组件

常用:Box、Sphere、Capsule
不常用:Wheel 环状、车轮 、Mesh、Terrain 地形

车轮参数

![[Pasted image 20240710225151.png]]

Mass:车轮的质量

Radius:车轮的半径

Wheel Damping Rate:这是应用于车轮的阻尼值

Suspension Distance:车轮悬架的最大延伸距离(在局部空间中测量)。悬架始终向下延伸穿过局部 Y 轴。

Force App Point Distance:此参数定义车轮上的受力点。此距离应该是距车轮底部静止位置的距离(沿悬架行程方向),以米为单位。当 forceAppPointDistance = 0 时,受力点位于静止的车轮底部。较好的车辆会使受力点略低于车辆质心。

Suspension Spring:悬架尝试通过增加弹簧力和阻尼力来到达目标位置 (Target Position)

  • Spring
    弹簧力尝试到达目标位置。值越大,悬架达到目标位置就越快
  • Damper
    抑制悬架速度。值越大,悬架弹簧移动就越
  • Target Position
    悬架沿悬架距离 (Suspension Distance) 的静止距离。1 对应于完全展开的悬架,0 对应于完全压缩的悬架。默认值为 0.5,与常规汽车的悬架行为匹配。

Forward Friction:车轮向前滚动时轮胎摩擦的特性。

Sideways Friction:车轮侧向滚动时轮胎摩擦的特性。

  • Extremum Slip:曲线的极值点。
  • Extremum Value:曲线的极值点。
  • Asymptote Slip:曲线的渐近点。
  • Asymptote Value:曲线的渐近点。
  • Stiffness:
    Extremum Value 和 Asymptote Value 的乘数(默认值为 1)。改变摩擦力的刚度。将此值设置为零将完全禁用车轮的所有摩擦力。通常在运行时修改刚度以使用脚本来模拟各种地面材质。

注意:
不必通过转动或滚动 WheelCollider 对象来控制汽车;附加了 WheelCollider 的对象应始终相对于汽车本身固定

网格参数

![[Pasted image 20240710224658.png]]

Convex:如果启用此属性,该 Mesh Collider 将与其他 Mesh Collider 发生碰撞。Convex Mesh Collider 最多 255 个三角形。

Cooking Options:启用或禁用影响物理引擎对网格处理方式的网格烹制选项。

  • None:禁用下方列出的所有 Cooking Options。
  • Everything:启用下方列出的所有 Cooking Options。
  • Cook for Faster Simulation:
    使物理引擎烹制网格以加快模拟速度。启用此设置后,这会运行一些额外步骤,以保证生成的网格对于运行时性能是最佳的。这会影响物理查询和接触生成的性能。禁用此设置后,物理引擎会使用更快的烹制速度,并尽可能快速生成结果。因此,烹制的 Mesh Collider 可能不是最佳的。
  • Enable Mesh Cleaning:
    使物理引擎清理网格。启用此设置后,烹制过程会尝试消除网格的退化三角形以及其他几何瑕疵。此过程生成的网格更适合于在碰撞检测中使用,往往可生成更准确的击中点。
  • Weld Colocated Vertices:
    使物理引擎在网格中删除相等的顶点。启用此设置后,物理引擎将合并具有相同位置的顶点。这对于运行时发生的碰撞反馈十分重要。

Mesh:引用需要用于碰撞的网格。

网格烹制
网格烹制将常规网格更改为可以在物理引擎中使用的网格。烹制会构建用于物理查询的空间搜索结构(如 Physics.Raycast)以及用于接触生成的支持结构。Unity 在碰撞检测中使用网格之前烹制所有这些网格。这可在导入时 (Import Settings > Model > Generate Colliders) 或运行时进行。

地形参数

![[Pasted image 20240710224640.png]]

Terrain Data:地形数据

Enable Tree Colliders:选中此属性时,将启用树碰撞体

1.3 碰撞检测函数

OnCollisionEnter(Collision collision)
OnCollisionStay(Collision collision)
OnCollisionExitCollision collision)

Collision参数

![[Pasted image 20240710230104.png]]

二、物理材质

决定交互方式 碰撞效果:是否有弹跳损失等
创建:Project右击->Create->Physic Material。注意2D和3D的区别

物理材质参数

在这里插入图片描述

Dynamic Friction:
已在移动时使用的摩擦力。通常为 0 到 1 之间的值。值为零就像冰一样,值为 1 将使对象迅速静止(除非用很大的力或重力推动对象)

Static Friction:
当对象静止在表面上时使用的摩擦力。通常为 0 到 1 之间的值。值为零就像冰一样,值为 1 将导致很难让对象移动。

Bounciness:
表面的弹性如何?值为 0 将不会反弹。值为 1 将在反弹时不产生任何能量损失,预计会有一些近似值,但可能只会给模拟增加少量能量。

Friction Combine:两个碰撞对象的摩擦力的组合方式。

  • Average:对两个摩擦值求平均值。
  • Minimum:使用两个值中的最小值。
  • Maximum:使用两个值中的最大值。
  • Multiply:两个摩擦值相乘。

Bounce Combine:
两个碰撞对象的弹性的组合方式。其模式与 Friction Combine 模式相同

三、触发检测

不产生物理效果的碰撞。2个碰撞器,1个刚体。
is trigger = true;

3.1 触发检测函数

OnTriggerEnter(Collider collider)
OnTriggerStay(Collider collider)
OnTriggerExit(Collider collider)

关键参数:Collider

在这里插入图片描述

Unity入门】24.碰撞检测 学习Unity碰撞体相关~ 阅读详情

相关推荐

【唐老狮】Unity——物理系统碰撞检测

【学习目标】 碰撞检测 能够让两个游戏物体之间产生碰撞 能够让两个物体碰撞时表现出不同效果 能够通过代码检测到碰撞产生的不同阶段 能够使用触发器让两个物体相互穿透 能够通过代码检测到触发产生的不同阶段 【碰撞检测】 【碰撞的必要条件】 两个游戏物体(GameObject)之间 至少有一个物体有刚体组件(Rigidbody) 并且两个物体都有碰撞盒组件(Collider) 【实例】 上方物体挂载了刚体和碰撞盒 下方物..

MrTang_Unity的博客 7202

11. unity 物理系统碰撞检测+射击游戏案例

物理属性和小案例分享

山间点烟雨 1353

UnityUnity碰撞检测(3D和2D)

碰撞检测可以说时学习Unity中最重要的一个部分,以为在游戏中,想要游戏进行交互,碰撞时非常重要的,而我在网上查了很多教程,但是都没有成功,后来经过我的仔细检查代码与修改,终于成功了

SMG_DSG的博客 8228

UnityUnity物理系统碰撞检测教程

设置重力:在Physics中,可以设置全局的重力大小和方向。禁用和启用重力:在刚体组件中,使用属性来控制物体是否受到重力的影响。// C#代码示例:禁用和启用重力// C#代码示例:禁用和启用重力 using UnityEngine;// 切换重力使用状态 useGravity =!useGravity;} }();// 切换重力使用状态useGravity;以上示例展示了如何在Unity中创建物理动画、使用力和扭矩以及实现重力效果。

kkchenjj的博客 1510

2022-04-20 Unity入门7——物理系统碰撞检测

文章目录一、刚体 Rigid Body二、碰撞器 Collider三、物理材质四、碰撞检测函数五、刚体加力 一、刚体 Rigid Body ​ 刚体利用体积(碰撞器 Collider)进行碰撞计算,模拟真实的碰撞效果,产生力的作用 ​ 碰撞产生的必要条件: 两个物体都有碰撞器 Collider 至少一个物体有刚体 Mass:质量 默认为千克,质量越大惯性越大 Drag:空气阻力 根据力移动对象时影响空气阻力大小 0 表示没有空气阻力 Augular Drag:旋转阻力 根据扭矩旋转对象时影

zheliku的博客 1万+

Unity入门7——物理系统碰撞检测

设置为连续动态的刚体,将在测试与该刚体的碰撞时使用连续碰撞检测(物理性能消耗较大,物体运动缓慢时请设置为 Discrete)如果是一个异形物体,刚体在父对象上,如果你想通过子对象上挂脚本检测碰撞是不行的,必须挂载到这个刚体父对象上才行。​ 为物体添加 Constant Force,若物体之前没有 Rigid Body,则会为其自动添加。​ 刚体利用体积(碰撞器 Collider)进行碰撞计算,模拟真实的碰撞效果,产生力的作用。如果该对象添加了刚体 Rigid Body,则该选项必须勾选,否则会报错。

weixin_53163894的博客 1万+

Unity 物理系统进阶:碰撞检测的层级设置与过滤

Unity物理系统进阶:碰撞检测的层级设置与过滤》深入讲解了Unity游戏开发中碰撞检测的核心技术。文章从基本概念出发,阐述了层级设置与过滤的重要性,包括提升开发效率、保障游戏性能等关键价值。通过技术原理分析,详细介绍了Unity的组件化架构和生命周期函数等核心机制。实践部分提供了环境准备指南和两个典型代码示例(游戏对象控制与UI交互),展示如何实现碰撞检测与物理交互。本文作为《Unity工程师成长之路教程》系列第七篇,是开发者从新手进阶到高级工程师的重要学习资源。

输出倒逼输入,写作驱动成长。 8002

UnityUnity物理系统碰撞检测教程_2024-07-12_20-05-18.Tex

设置重力:在Physics中,可以设置全局的重力大小和方向。禁用和启用重力:在刚体组件中,使用属性来控制物体是否受到重力的影响。// C#代码示例:禁用和启用重力// C#代码示例:禁用和启用重力 using UnityEngine;// 切换重力使用状态 useGravity =!useGravity;} }();// 切换重力使用状态useGravity;以上示例展示了如何在Unity中创建物理动画、使用力和扭矩以及实现重力效果。

1335

Unity04_物理系统碰撞检测

但是抛开上述场景,当物体还没有到达指定位置时,就给他施加这个力,他会出现物体被指定位置的气功,远程施加一个对应方向的力,物体将产生扭矩力和位移。左图为原始状态,右图为爆炸时的状态,可以看到有些对象被爆炸产生的力掀翻了,此外距离爆炸点远,受到的力也会衰减。如图,对其施加了大小5,方向为世界坐标(001)的力,只不过坐标系不同,他们的移动也不一样。答:得到爆炸范围中的所有可以被炸飞的对象,并获得他们的刚体,然后为他们的刚体单独爆炸的力。========== 【演示:添加力,使物体移动】 ==========

2503_93931574的博客 366

Unity引擎开发:物理引擎与碰撞检测_自定义物理系统的构建

Unity中,我们可以通过编写脚本来实现自定义的物理计算。以下是一个简单的例子,演示如何通过自定义脚本来模拟一个自由落体的物体。首先,创建一个C#脚本,命名为,并将其附加到一个GameObject上。// 物体的质量 [ SerializeField ] private float mass = 1.0f;// 重力加速度 [ SerializeField ] private Vector3 gravity = new Vector3(0 , - 9.81f , 0);

chenlz2007的博客 1136

Unity物理系统实战:从碰撞检测到爆炸效果的实现

本文深入解析Unity物理系统的核心组件与实战应用。从刚体与碰撞器的协作原理出发,详细讲解了碰撞检测的实现机制,并通过一个完整的流星撞击与爆炸效果案例,演示了从组件配置、脚本编写到特效生成的全流程。文章还提供了关键的碰撞器选择、图层优化等性能调优指南,帮助开发者高效构建真实可信的游戏物理交互。

weixin_29001327的博客 211

Unity物理系统核心原理:从碰撞检测到约束求解的源码级解析

物理引擎是现代游戏和仿真应用的核心组件,负责模拟物体在虚拟世界中的运动、碰撞与交互。其基本原理基于牛顿力学,通过离散时间步长对物理实体状态进行迭代更新。核心流程包括碰撞检测、约束求解和数值积分三大阶段,其中碰撞检测又分为宽阶段和窄阶段,分别负责快速筛选潜在碰撞对和执行精确几何测试。约束求解器则通过迭代算法解决物体间的碰撞和关节约束,确保模拟的稳定性。这些技术共同支撑了从简单刚体运动到复杂布娃娃系统的各类应用场景。本文以Unity引擎为例,深入剖析其物理系统的内部实现机制,特别是PhysX与DOTS物理在碰撞

weixin_34195364的博客 417

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

RigidBody组件是Unity物理系统的核心,用于模拟游戏对象的物理行为,如重力、弹力和摩擦力。刚体分为2D和3D两种,分别适用于不同的游戏场景。刚体的关键参数包括质量(Mass)、空气阻力(Drag)、旋转阻力(AngularDrag)、是否受重力影响(UseGravity)、是否参与动力学计算(IsKinematic)、插值模式(Interpolation)和碰撞检测模式(CollisionDetection)。这些参数共同决定了物体在虚拟世界中的运动方式和交互效果。例如,质量影响物体的惯性和碰撞动

FAREWELL00075的博客 2005

Unity FPS游戏物理系统终极指南:如何精准实现碰撞检测与角色移动控制

FPSSample是一个基于Unity引擎开发的第一人称多人射击游戏示例项目,展示了如何在Unity中构建完整的FPS游戏物理系统。该项目包含了**碰撞检测**、**角色移动控制**和**物理交互**等核心功能,为游戏开发者提供了宝贵的参考实现。 ## 🔥 FPS游戏物理系统核心组件 ### 角色移动查询系统 在[Assets/Scripts/Game/Modules/Character/C

gitblog_00448的博客 411

Unity物理系统深度解析:从碰撞检测到角色移动的实战指南

在游戏开发中,物理引擎是模拟物体运动和交互的核心技术,它基于经典力学原理,通过计算力、速度、碰撞等物理量,为虚拟世界赋予真实感与互动性。其技术价值在于为开发者提供了高效、稳定的物理模拟能力,是实现角色移动、物体交互和环境反馈的基础。在游戏开发、虚拟仿真和交互式应用等场景中,物理系统都扮演着关键角色。本文聚焦于Unity引擎的物理系统,深入探讨其核心组件如Rigidbody和Collider的工作原理,并详细解析碰撞检测与角色移动控制的实现方法,帮助开发者解决常见的性能与稳定性问题,提升游戏手感与交互体验。

weixin_28192383的博客 212

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

本文简单介绍了3D碰撞器,和物理材质

FAREWELL00075的博客 1683

unity物理系统——碰撞检测

注意:碰撞和触发响应函数 属于 特殊的生命周期函数 也是用过反射调用。

m0_73113333的博客 681

Unity企业内训(第4讲:Unity物理系统)(Yanlz+Unity+物理系统+立钻哥哥+碰撞器+刚体+碰撞检测+触发事件+物理材质+射线+Collider+Rigidbody+Ray+)

Unity企业内训》 版本 作者 参与者 完成日期 备注 Unity_Training_V01_1.0 严立钻   2018.09.11     ...

VRunSoftYanlz的博客 3034
上一篇: Unity--物理系统(范围检测)
下一篇: C#入门-变量、常量
dcprime
博客等级 码龄3年 144粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值