- Unity 3D/2D移动开发实战教程
- 朱淑琴
- 1727字
- 2025-02-25 13:58:59
知识总结
知识点一:碰撞与碰撞器
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器(Collider),刚体可以让物体在物理影响下运动,而碰撞器是一群组件,包含了很多种类型,不同的类型应用于不同的场合,但必须加到GameObject上。物体发生碰撞的必要条件是两个物体都必须带有碰撞器,其中一个物体还必须带有Rigidbody刚体。
(1)Rigidbody 2D(刚体碰撞器):任何会动的对象都需要加入刚体碰撞器,玩家所操控的主角加入刚体碰撞器后,在对象外观的显示上没有任何的不同。但是在Inspector面板中可以为对象调整摩擦力(Mass)、线性阻力(Linear Drag)、旋转阻力(Angular Drag)、重力(Gravity Scale)等参数,用来模拟真实世界的物理现象。
(2)Box Collider 2D(箱形碰撞器):箱形碰撞器,又称盒装碰撞器,可以快速为对象加入一个方形的检测层。加入箱形碰撞器后,在对象的外观可以看到一条由绿线组成的框架,此框架就是碰撞的检测范围,在Inspector面板中可以调整此碰撞器的中心坐标和长宽尺寸。
(3)Circle Collider 2D(圆形碰撞器):圆形碰撞器可以给对象加入一个圆形检测层。加入圆形碰撞器后,在组件的外观可以看到一个圆形检测范围,在Inspector面板中可以调整此碰撞器的材质、中心坐标和半径。
(4)Edge Collider 2D(边缘碰撞器):边缘碰撞器可以给对象加入一条碰撞检测线。加入碰撞检测线之后,可以在组件的外观看到一条绿色检测线,在Inspector面板中可以调整此碰撞器的形状。
(5)Polygon Collider 2D(多边形碰撞器):多边形碰撞器可以给对象加入一个描绘对象外框所形成的碰撞层。与其他碰撞器相比,多边形碰撞器能够更精准地捕捉对象的物理检测范围。
每种类型的碰撞器,我们都可以根据需要修改它们的碰撞范围。
知识点二:触发与触发器
触发(Trigger)和碰撞非常类似,触发指的是当两个对象发生碰撞时所引发的特殊事件,因此触发同样需要设置碰撞范围来进行检测,所以同样要为对象加入Box Collider 2D、Circle Collider 2D等碰撞器。除了Rigidbody(刚体)碰撞器之外,其他碰撞器都有一个名为Is Trigger的属性复选框可以勾选,当此复选框被勾选后,碰撞器就会被认定是触发器,从这点更加体现出Rigidbody(刚体)的独特性,也就是说Rigidbody是不可以被指定为触发器的。
Rigidbody之所以不可以被指定为触发器,主要是因为被加入触发器的对象不会受到物理现象的影响(例如碰撞、重力),但Rigidbody是为了设置物理现象而诞生的碰撞器,在这样的定义下就会产生冲突。
知识点三:碰撞器和触发器的区别
碰撞器和触发器的区别主要有以下几点。
(1)碰撞器不勾选Is Trigger属性复选框,对象会受到碰撞或重力影响。
(2)碰撞器勾选Is Trigger属性复选框时,就是触发器,对象不会受到碰撞或重力影响。
(3)若要对两个对象进行碰撞检测,则双方必须拥有碰撞器。
(4)若要对动态对象与静态对象进行碰撞检测,则动态对象必须拥有刚体碰撞器。
(5)碰撞或触发只能选择一种进行检测与执行,两者无法共存。
(6)触发器并非取消碰撞,而是取消了物理反应的碰撞器。
知识点四:预制体
预制体就相当于一个模板,可用于批量的套用工作。在Unity的工程建设中,Prefabs(预制体)是非常常用的一种资源类型,是一种可被重复使用的游戏对象。
预制体具有以下特点。
(1)它可以被置入多个场景中,也可以在一个场景中多次置入。
(2)当在场景中增加一个Prefabs,就实例化了一个Prefabs。
(3)所有Prefabs实例都是Prefabs原型的克隆。
(4)只要Prefabs原型发生改变,所有Prefabs实例都会产生变化,但是克隆体的改变并不会对母版造成影响(位于Project面板中的Prefabs是原型,即母版;拖曳到Hierarchy面板中的Prefabs是实例)。
知识点五:渲染顺序
Sorting Layer用于对渲染层级顺序进行控制。在气球漫游动画中,利用Sorting Layer属性的设置,创建了名为front和behind的两个图层,是为了让地板Floor这个对象和其他对象(气球、钉子阵、橘子皮、爆炸)处于不同的层,按不同的顺序进行渲染,制作地板在其他游戏对象后面的效果。选择Sorting Layer属性,单击“+”添加按钮,就可以看到当前所有的Sorting Layer,并且可以更改Sorting Layer的顺序,排位靠后的Sorting Layer会覆盖排位靠前的Sorting Layer。在气球漫游这个实例中,地板Floor对象位于排位靠前的behind层,而其他对象处于排位靠后的front。
需要注意不要混淆的是GameObject的Layer属性,Layer主要是通过光线投射来选择性地忽略碰撞器,或者添加碰撞功能。
试一试
根据所给素材完成子弹的碰撞与触发。首先为子弹和墙壁添加碰撞器与触发器,运行后子弹碰撞到墙壁,会触发爆炸动画,并且子弹消失(资源文件路径:Unity 3D/2D移动开发实战教程\第4章\试一试)。