Unity 3D PHYSICS 3D物理引擎学习笔记 1

1. Collider 碰撞体

Collider 有多种不同的形状,如果常规形状的 Collider 不能满足需求,一般有两种方法,一是用常规形状组合一个复杂形状;二是用 Mesh(网格),在使用Mesh时由于形状完全与对象一致,所以运算起来很复杂,这时可以用简化过的Mesh附加到对象上,这样级有利于复杂形状的碰撞计算,又不致于让运行太卡。

要发生碰撞,两个物体一定得有一个包含Rigidbody(刚体)。

2. Trigger 触发器

一旦在 Collider 中勾选了 Trigger,Collider 就不在有任何碰撞行为,必须由程序来控制。

生丁Trigger的标准做法是将Trigger设定为静态物体,这样它们就不会受物理引擎的影响。

用来做Trigger的碰撞体也被称作触发范围(Trigger Zone)。使用Trigger可以实现由程序来进行触发判断而不需要由物体产生实际的物理碰撞。

3. RigidBody 刚体

正常情况下,游戏里所有会动动物体都应该带有Rigidbody。刚体是让物体可以被物理所影响的元件。它带有物理属性,例如:Mass(质量)、阻力(Drag)、Angular Drag(旋转阻力)和Velocity(速度)。

刚体是触发所有物理行为的基本元件,除此之外该物体也必须有一个碰撞体才能与其它物理物体互动。

重力的设定是在菜单 Edit->Project Settings->Physics中,重力的设定是一三维的值,而Y轴的预设值时重力的实际值 -9.81。

Is Kinematic(运动体)决定物体是否会被物理行为影响。物理引擎一般只在场景初始化时检查一遍所有静态物体,如果静态物体位置发生了变化,物理引擎就必须要重新检查所有静态物体来保持物理的准确性,这样效能会大幅下降,要避免这样的问题,可以使用运动体,并透过Translate函数让运动体运动,这样物体就可以在不影响自己的情况下与其它物体产生物理行为。
简单的说,就是对该物体设置了Is Kinematic之后,每次通过translate移动该物体时,实际上该物体会主动向物理引擎汇报位置,从而提高整体的效能。

Interpolate (差值)像与它下拉列表中的Extrapolate(推算)是用来解决物体的不规则位移的,当使用刚体移动时,产生了些许的不规则位移,此时你可以设置使用Interpolate项,表示利用上一帧的位置来进行平滑的位移运算;Extrapolate则是预测下一帧的坐标位置来进行平滑的位移。

Collision Detection(碰撞侦测类型), 包括Discrete(非连续性)、Continuous(连续性)、Continuous Dynamic(动态连续性),一般情况下使用Discrete(非连续性);Continuous(连续性)时让快速移动的物体能和静态物体互动的设定;Continuous Dynamic(动态连续性)是让快速移动的物体能和其它动态物体互动。