IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【唐老狮】Unity——物理系统(碰撞检测) -> 正文阅读

[游戏开发]【唐老狮】Unity——物理系统(碰撞检测)

【学习目标】

碰撞检测

  1. 能够让两个游戏物体之间产生碰撞

  2. 能够让两个物体碰撞时表现出不同效果

  3. 能够通过代码检测到碰撞产生的不同阶段

  4. 能够使用触发器让两个物体相互穿透

  5. 能够通过代码检测到触发产生的不同阶段



【碰撞检测】

【碰撞的必要条件】

两个游戏物体(GameObject)之间

至少有一个物体有刚体组件(Rigidbody)

并且两个物体都有碰撞盒组件(Collider)



【实例】

?

?

上方物体挂载了刚体和碰撞盒

下方物体挂载了碰撞盒

运行后由于上方物体有刚体组件

并且Use?Gravity默认勾选

所以它会受重力影响自由下落

图片

?



【刚体组件】

让游戏物体(GameObject)

受到力的作用

参数说明

红色字为重要参数

其余了解即可

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 轴旋转。



【碰撞盒组件们】

决定游戏物体(GameObject)

碰撞范围并产生

碰撞效果

常用碰撞盒

Box Collider(盒装碰撞盒)

Sphere?Collider(球形碰撞盒)

Capsule?Collider(胶囊碰撞盒)

不常用碰撞盒

性能消耗高

Wheel Collider(环状碰撞盒)

Mesh?Collider(网格碰撞盒)

Terrain?Collider(地形碰撞盒)

共有参数含义:

Is Trigger

是否是触发器,如果启用此属性,则该碰撞体将用于触发事件,并被物理引擎忽略

Material

物理材质,可以确定碰撞体和其它对象碰撞时的交互(表现)方式。

Center

碰撞体在对象局部空间中的中心点位置。

?

Size

碰撞体在X、Y、Z方向上的大小

?

Radius

球形碰撞体的半径大小

?

Radius

胶囊体的半径

Height

胶囊体的高度

Direction

胶囊体在对象局部空间中的轴向

?

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 的对象应始终相对于汽车本身固定

?

Convex

勾选此复选框可启用?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) 或运行时进行。

?

Terrain Data

地形数据

Enable Tree Colliders

选中此属性时,将启用树碰撞体

━━━━━━━━━━━━━━━━━━━━

完成目标一

能够让两个游戏物体之间产生碰撞

━━━━━━━━━━━━━━━━━━━━


【物理材质】

当物体之间发生碰撞时

物理材质决定碰撞体与其它对象的

交互方式(碰撞表现)

物理材质是和碰撞盒

结合使用的


【创建】
?

Project窗口

右键

Create

Physic Material

?

?

Dynamic Friction

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

Static Friction

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

Bounciness

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

Friction Combine

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

-Average

对两个摩擦值求平均值。

-Minimum

使用两个值中的最小值。

-Maximum

使用两个值中的最大值。

-Multiply

两个摩擦值相乘。

Bounce Combine

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



【实例】

?

把反弹力改为1

?

把这个物理材质

拖给两个立方体

运行后效果如下

?

通过设置物理材质

的各个参数

可以达到不同的

碰撞表现效果

━━━━━━━━━━━━━━━━━━━━

完成目标二

能够让两个物体碰撞时表现出不同效果

━━━━━━━━━━━━━━━━━━━━



【碰撞检测函数】

?

关键参数

Collision

?

将这个Test脚本

挂载到两个物体中的其中一个即可

?

运行时

当产生碰撞时

会自动调用对应函数

进行逻辑处理

?

━━━━━━━━━━━━━━━━━━━━

完成目标三

能够通过代码检测到碰撞产生的不同阶段

━━━━━━━━━━━━━━━━━━━━



【触发器】
?

可以让挂载刚体的物体

穿透碰撞盒(一箭穿心)

主要作用

不产生物理效果

只进行碰撞检测

通过响应函数处理对应逻辑

?

制作触发器非常简单,只需要在满足碰撞产生的必要条件的物体上,将带有刚体的物体上的碰撞盒的Is?Trigger属性勾选上

?

运行效果

刚体对象可以穿透对方

没有物理碰撞效果

?

━━━━━━━━━━━━━━━━━━━━

完成目标四

能够使用触发器让两个物体相互穿透

━━━━━━━━━━━━━━━━━━━━



【触发检测函数】

?

关键参数

Collider

?

?

将这个Test脚本

挂载到有刚体的物体上即可

运行时

当产生触发时

会自动调用对应函数

进行逻辑处理

?

━━━━━━━━━━━━━━━━━━━━

完成目标五

能够通过代码检测到触发产生的不同阶段

━━━━━━━━━━━━━━━━━━━━


【总结】
?

完成了五个学习目标后

就能基本掌握物理系统的核心

其中最重要的内容是

碰撞产生的必要条件

刚体和碰撞盒组件上的核心参数

碰撞和触发检测的6个函数


关注唐老狮获取更多干货内容

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:50:05  更:2021-12-24 18:50:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:30:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码