概述
1. 当游戏对象运行在场景中进行加速或碰撞时,需要Unity的物理引擎系统为玩家展示最为真实的物理效果。
2. Unity内置了一个3D物理引擎和一个2D物理引擎,用法基本相同,但是需要使用不同的组件实现。
物理系统相关组件及参数详解
Rigidbody组件
1. 为游戏对象添加RigidBody组件,实现该对象在场景当中的物理交互。当游戏对象添加了Rigidbody组件后,游戏对象便可以接受外力和扭矩力。任何游戏对象只有在添加RigidBody后才会受重力影响。当需要通过脚本为游戏对象添加作用力以及通过Nvidia物理引擎与其他的游戏对象发生互动的运算都必须拥有Rigidbody组件。
2. 制作2D游戏时,应为Sprite添加Rigidbody2D组件。
3. 添加Rigidbody组件步骤:
4. Rigidbody组件的属性面板:
(1) Mass:质量。该项用于设置游戏对象的质量。建议在同一游戏场景中,游戏对象之间的质量差值不要大于100倍。
(2) Drag:阻力。当游戏对象受力运动时受到空气阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止运动。
(3) Angular Drag:角阻力。当游戏对象受扭矩力旋转时受到的控制阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止旋转。
(4) Use Gravity:使用重力。若开启此项,游戏对象会受到重力的影响。
(5) Is Kinematic:是否开启动力学。若开启此项,游戏对象将不再受到物理引擎的影响从而只能通过Transform属性来对其进行操作。该方式适用于模拟平台的移动或带有铰链关节链接刚体的动画。
(6) Interpolate:插值。该项用于控制刚体运动的抖动情况,None表示没有插值,Interpolate表示基于前一帧transform平滑此次Transform,Extrapolate基于下一帧的Transform来平滑此次Transform。
(7) Collision Detection:碰撞检测。该属性用于控制避免高速运动的游戏对象穿过其他的对象而未发生碰撞。
- Discrete离散碰撞检测,该模式与场景中其他所有的碰撞体进行碰撞检测,为默认值。
- Contimuous连续碰撞检测,该模式用于检测与动态碰撞体(带有Rigidbody)碰撞,使用连续碰撞检测模式来检测与网格碰撞体(不带RigidBody)碰撞。其他的刚体会采用离线碰撞模式。此模式使用于那些需要采用连续动态碰撞检测的对象相碰撞的对象。这对物理性能有很大的影响。
(8) Constraints约束,用于控制对于刚体运动的约束。分别有冻结位置和冻结旋转,对应的内容将会被冻结无效。
(9) Rigidbody中有额外的属性Sleeping Mode。其他StartAwake表示最开始就唤醒。StartASleep最开始就休眠,可以通过碰撞唤醒。
CharacterController组件
1. 主要用于对第三人称或第一人称游戏主角的控制,并不适用刚体物理效果。
2. CharacterController组件属性:
(1) Slope Limit:坡度限制。该参数用于设置所控制的游戏对象只能爬上角度小于或等于该参数值的斜坡。
(2) Step Offset:台阶高度。该参数用于设置所控制的游戏对象可以迈上的最高台阶的高度。
(3) Skin Offset:皮肤厚度。该参数决定了两个碰撞体可以相互渗入的深度。较大的参数值会产生抖动现象,较小的参数值会导致所控制的游戏对象被卡住,较为合理的设置是该参数值的Radius值的10%.
(4) MinMoveDistance:用于防止抖动,如果所控制的游戏对象的移动距离小于该值,则游戏对象不会移动。
(5) Center:该参数决定了胶囊碰撞体与所控制的游戏对象的相对位置。
(6) Radius,Height:设置胶囊碰撞体的半径和高度。
力场工具
1. 力场是一种为刚体快递添加作用力的方法,适用于类似火箭发射出来的对象,这些对象在起初并没有很大的速度但却是不断地加速。力场分为ConstantForce和ConstanctForce2D。
2. ConstantForce添加步骤:
3. ConstanceForce属性面板:
3. ConstanctForce2D添加步骤:
4. ConstanceForce2D面板属性:
关节组件
1. 关节组件是模拟物体与物体之间连接关系,关节必须依赖于刚体组件。关节组件可添加到多个游戏对象当中,关节组件也分为3D类型的关节和2D类型的关节。
2. 添加3D关节组件:
3. 添加2D关节组件:
各种3D关节类型:
1. Hinge Joint铰链关节。
- 铰链关节由两个刚体组成,该关节会对刚体进行约束,使得它们好像被连接在一个铰链上那样运动。
- 它非常适合于对门的模拟,也适用于模型链以及钟摆等物体。
- 单独的铰链关节要应用到一个对象身上,铰链或绕着Anchor属性所指定的点来旋转,按照Axis属性指定的轴来移动。
- 不用给关节的ConnectedBody属性添加对象,只有当希望关节的Transform属性依赖于附加对象的Transform属性时才为关机的ConnectedBody属性来添加对象。
2. Fixed Joint固定关节
- 固定关节用于约束一个游戏对象对另一个游戏对象的运动。类似于对象的父子关系,但它是通过物理系统来实现而不是像父子关系那样是通过Transform属性来进行约束。
- 固定关节适用于以下的情形:当希望将对象较容易与另一个对象分开时,或者连接两个没有父子关系的对象使其一起运动时。
- 使用固定关节的对象自身需要有一个刚体组件。
- 可通过BreakForce和BreakTorque属性来设置关节的强度极限,如果这些参数不是无穷大而是一个数值的话,那么当是加到对象身上的力或者转矩大于此极限值时,固定关节将被销毁,而对对象的约束也就随之消失。
3. Spring Joint弹簧关节
- 弹簧关节组件可以将两个刚体连接在一起,使其像连接着弹簧那样运动。
- 弹簧关节允许一个电邮刚体的游戏对象被蜡像一个指定的位置目标,这个目标可以是另一个刚体对象或者世界。当游戏对象目标位置越来越远是,弹簧关节会对齐施加一个作用力使其回到目标的原点位置。
4. CharacterJoint角色组件
- 角色关节主要用于表现布娃娃的效果,它是扩展的球关节,可用于限制关节在不同旋转轴下的旋转角度。
5. ConfigurableJoint可配置关节
- 可配置关节组件支持用户自定义关节,它开放了PhysX引擎中的所有与关节相关的属性。
- 可配置关节有两类主要的功能:移动/旋转限制和移动/旋转加速度。
2D类型关节组件
1. Spring Joint2D
- 2D弹簧关节可将两个带刚体d
2. DistanceJoint2D距离关节
- 距离关节将两个对象以固定的距离连接在一起。
3. HingeJoint2D铰链关节。
- 2D铰链关节组件会对刚体进行约束,使得它们就好像被连接在一个铰链上那样运动。
4. WheelJoint2D车轮关节。
- 2D车轮关节组件在可以移动的对象上使用模拟滚动轮。
2D PhysicEffectors组件
Point Effector 2D点效应
1. 2D点效应将力应用于吸引或排斥一个点。
Surface Effector 2D表面效应
1. 适用于沿着碰撞体表面的切线力。这种效应可以用来创建恒速电梯和表面移动。
碰撞体组件
1. 3D物理组件和2D物理组件有独立的碰撞体组件,它要与刚体一起添加到游戏对象上才能出发碰撞。
2. 在物理模拟中,没有碰撞体的刚体会彼此互相穿过。
给游戏对象添加碰撞组件
BoxCollider盒碰撞体
盒碰撞体时一个立方体外形的基本碰撞体。
2. Edit Collider:编辑碰撞体。点击后面的图标即可在Scene视图中编辑碰撞体。
3. Is Trigger:触发器。选中该项,则该碰撞体可用于触发事件,同事忽略物理碰撞。
4. Material:材质。采用不同的物理材质类型决定了碰撞体与其他对象的交互形式。
5. Center:碰撞体在对象的局部坐标中的位置。
6. Size:碰撞体在X,Y,Z方向上的大小。
Sphere Collider球性碰撞体
球性碰撞体适用于落石,乒乓球等游戏对象。
CapsuleCollider胶囊碰撞体
胶囊碰撞体由一个圆柱体和与其相连的两个半球组成。可用在角色控制器或与其他不规则形状的碰撞结合来使用。
1. Direction:在对象的局部坐标中胶囊的纵向方向所对应的坐标轴。默认是Y轴。
Mesh Collider网格碰撞体
1. 网格碰撞体通过获取网格对象并在其基础上构建碰撞,与在复杂网络模型上使用基本碰撞体相比,网格碰撞体要更加精细,但会占用更多的系统资源。
2. 开启Convex参数的网格体才可以与其他的网格体发生碰撞。
3. Convex:凸起。若开启该项,则网格体将会与其他的网格碰撞体发生碰撞。
4. Is Trigger:触发器。若开启该项,则此碰撞体可用于触发事件,并将被物理引擎所忽略。
5. Mesh:获取游戏对象的网格并将其作为碰撞体。
6. 网格碰撞体按照所附加对象的Transform组件属性来设置碰撞体的位置和大小比例。碰撞网格使用了背面消隐方式,如果一个对象与一个采用背面消隐的网格在视觉上相碰撞的话,那么他们并不会在物理上发生碰撞。
7. 通常两个网格碰撞体之间并不会发生碰撞,但所有的网格碰撞体斗鱼基本碰撞体发生碰撞。如果碰撞体的Convex参数设为开启,则它也会与其他的网格碰撞体发生碰撞。
8. 只有当网格碰撞体的三角形数量少于255时,Convex参数才会生效。
WheelCollider车轮碰撞体
1. 车轮碰撞体是一种针对地面车辆的特殊碰撞体。它有内置的碰撞检测,车轮物理系统以及滑胎摩擦的参考体。
TerrainCollider地形碰撞体
1. 地形碰撞体是基于地形构建的碰撞体。
2. TerrainData:地形数据。采用不同的地形数据决定了地形的外观。
3. Enable Tree Collider:开启树碰撞。
CircleCollider2D
1. 该组件用于给游戏对象添加圆形的碰撞体。
2. Material:材质,确定碰撞的属性,如摩擦和反弹。
3. Is Trigger:触发器。若启用此项,则此碰撞体用于触发事件,不会发生任何物理交互。
4. Used By Effector:使用效应器。若启用此项,就可以使用物理效应器。
BoxCollider2D
1. 该组件用于给2D对象添加矩形的碰撞体。
EdgeCollider2D边缘碰撞体
1. 边缘碰撞体的形状是由一个自由的边缘线构成的,所以可以通过编辑边缘碰撞体,达到很精确地适应各种形状的游戏对象。
PolygonCollider2D多边形碰撞体
1. 多边形碰撞体的形状是一个自由边缘线做的部分,所以可以很精确地调整碰撞体的形状以使用游戏对象的形状。多边形碰撞体通常会自动地适应2D游戏对象的形状。
布料组件
1. 布料组件可以模拟类似布料的行为状态,比如飘动的旗帜,角色身上的衣服等。
2. 为游戏对象添加布料组件:
3. 布料组件包含了SkinnedMeshRenderer蒙皮网格渲染器和Cloth组件。
SkinnedMeshRenderer组件
1. Cast Shadows:投射阴影。
- Off:关闭投射阴影。
- On:开启投射阴影。
- Two Sided:开启双面阴影,模型内外两侧都会产生阴影。
- ShadowsOnly:只投射阴影,模型不会被渲染。
2. Receive Shadows:接收阴影。选中该项,则布料将会接收阴影。
3. Materials:材质。该项用于为布料选择材质。
Cloth组件
1. 编辑衣料自身碰撞。
2. 编辑衣料约束