200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【唐老狮】Unity——物理系统(碰撞检测)

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

时间:2020-01-10 03:35:29

相关推荐

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

【学习目标】

碰撞检测

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

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

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

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

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

【碰撞检测】

【碰撞的必要条件】

两个游戏物体(GameObject)之间

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

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

【实例】

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

下方物体挂载了碰撞盒

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

并且UseGravity默认勾选

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

【刚体组件】

让游戏物体(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(盒装碰撞盒)

SphereCollider(球形碰撞盒)

CapsuleCollider(胶囊碰撞盒)

不常用碰撞盒

性能消耗高

Wheel Collider(环状碰撞盒)

MeshCollider(网格碰撞盒)

TerrainCollider(地形碰撞盒)

共有参数含义:

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 ValueAsymptote Value的乘数(默认值为 1)。改变摩擦力的刚度。将此值设置为零将完全禁用车轮的所有摩擦力。通常在运行时修改刚度以使用脚本来模拟各种地面材质。

注意

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

Convex

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

Cooking Options

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

-None

禁用下方列出的所有Cooking Options

-Everything

启用下方列出的所有Cooking Options

-Cook for Faster Simulation

使物理引擎烹制网格以加快模拟速度。启用此设置后,这会运行一些额外步骤,以保证生成的网格对于运行时性能是最佳的。这会影响物理查询和接触生成的性能。禁用此设置后,物理引擎会使用更快的烹制速度,并尽可能快速生成结果。因此,烹制的 Mesh Collider 可能不是最佳的。

-Enable MeshCleaning

使物理引擎清理网格。启用此设置后,烹制过程会尝试消除网格的退化三角形以及其他几何瑕疵。此过程生成的网格更适合于在碰撞检测中使用,往往可生成更准确的击中点。

-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脚本

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

运行时

当产生碰撞时

会自动调用对应函数

进行逻辑处理

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

完成目标三

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

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

【触发器】

可以让挂载刚体的物体

穿透碰撞盒(一箭穿心)

主要作用

不产生物理效果

只进行碰撞检测

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

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

运行效果

刚体对象可以穿透对方

没有物理碰撞效果

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

完成目标四

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

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

【触发检测函数】

关键参数

Collider

将这个Test脚本

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

运行时

当产生触发时

会自动调用对应函数

进行逻辑处理

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

完成目标五

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

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

【总结】

完成了五个学习目标后

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

其中最重要的内容是

碰撞产生的必要条件

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。