Unity 3D官方教程——2D UFO学习记录
1.基础设置
请将新项目命名为'2D UFO'后设置其类型为二维项目,并导入官方资源后将其场景保存为主要内容区域(这些操作在之前的练习记录中已介绍过)。
建立游戏运行的基础平面。在 Hierarchy 中导入 Sprites 文件夹中的 Background 精灵和 UFO 精灵,并重置它们的位置。将 Hierarchy 中的 UFO 替换为 Player 精灵。
请将背景图景(Background)的排序层级设置为"background"选项,并将玩家角色(Player)的角色层级设置为"player"选项。由于2D游戏中没有透视系统用于确定绘制顺序的特点,在每个对象(Sprites)渲染器中必须手动配置排序层级以控制前后关系。排序层级按照从列表顶端到底端的原则进行排列,在视觉呈现上则会依次显示自下而上(类似于Photoshop中的图层效果)。此外,在排序层级面板中可以选择点击"Add Sorting Layer"按钮并利用上方工具栏对各层级进行上下拖拽以实现所需排列效果。
将Player的Scale设置为(0.75,0.75),2D项目Scale-z不起作用。
观察到Background显著超出游戏预览界面。在这里我们没有调整Background的比例参数而是采用了设置相机的方法将相机大小精确设定为16.5个单位。对于二维项目的相机,默认采用的是正交投影方式不过需要注意的是也可以选择透视投影作为替代方案但在实际应用中建议采用正交投影以简化游戏场景的设计流程
视口中未被捕获的区域可通过调整Main Camera的背景色实现改色效果,具体设置为颜色代码 (32, 32, 32) 。

2.控制飞碟移动
在Player角色中添加2D刚体属性,并在位于Scripts文件夹中的位置创建一个新的脚本文件,并将其命名为PlayerController。然后将该新创建的脚本拖入到Player角色中,并对其进行编辑配置以完成相关功能设置。

保存后回到unity将speed设置为10。
3.设置碰撞器
在Player角色上绑定CircleCollider2D组件,并将其半径值设定为2.15单位长度。同时,请将Rigidbody2D的GravityScale属性设置为0(表示不再施加重力影响)。
为防止player脱离平台范围而采取有效措施,在Unity引擎中实现背景平面与UFO之间的物理隔离。首要做法是为背景设置边界框碰撞组件以限制UFO移动范围。通过实验发现当UFO接近边缘时系统会自动贴合边缘以阻止其脱离平台。该系统会整合这些重叠区域为一个统一的边界框。值得注意的是当多个边界框覆盖同一区域且均不勾选Is Trigger属性时系统会将它们合并成一个整体边界框并默认排除Is Trigger功能以避免冲突
我们需要在平面边缘设置四个碰撞器组装成一个框架来覆盖整个平面。具体操作如下:例如,在进行操作时,请注意以下小技巧:当你需要添加组件时,请先选择一个小齿轮组件(可以通过复制现有组件并将其Paste As New Component来快速创建新的齿轮)。
我们需要在平面边缘设置四个碰撞器组装成一个框架来覆盖整个平面。具体操作如下:例如,在进行操作时,请注意以下小技巧:当你需要添加组件时,请先选择一个小齿轮组件(可以通过复制现有组件并将其Paste As New Component来快速创建新的齿轮)。

4.摄像机跟随
在使摄像机跟随UFO的过程中,首先想到的是将camera拖入player作为子对象。然而,在UFO旋转时镜头也会随之转动。因此需要新建CameraController脚本文件,并将Main Camera拖入其中进行编辑。

保存后回到unity,将player拖入脚本组件。
5.设置宝石
将Sprites文件夹中的PickUp精灵拖入Hierarchy,并将其Sorting Layer设为PickUps以便在平面上显示出来。添加CircleCollider并将Radius设定为0.92以使游戏物体呈现出圆润的效果。为了实现宝石的旋转效果,请新建名为Rotator的新脚本并拖入Pickups中进行编辑配置。

在Assets层级中新增一个文件夹命名为Prefabs,并将已配置好的PickUp导入其中以设置为预制件。在Hierarchy层级中新增一个对象命名为Pickups,并将现有的_pickup_导入其中使其成为子对象。随后选择该对象并按Ctrl+D复制操作将其复制11次排列成菱形形状。

接下来设置宝石可以被UFO消除,打开PlayerController脚本编辑。

设置预制件 PickUps 的所有 tag 字段值更改为 PickUp。随后选择预制件 PickUps 中的 Is Trigger 字段并勾选其选项(该字段可被触发)。
与使用三维(3D)建模的方式不同的是,在二维(2D)模式下,默认情况下未绑定刚体的静态物体即便将脚本指令用于控制其运动也会导致每帧重新计算该静态物体的位置与姿态这会显著影响性能因此,在预制件上绑定Rigidbody2D并将其设置为Kinematic模式是必要的选择
6.计分板和UI
创建Text对象命名为CountText,并将其内容字段更改为'Count Text'。设置颜色属性为黄色,并将Anchor Preset属性值设定在左上角(通过Shift+Alt键指定)。将位置属性的坐标设置在(10,-10,0)。在Canvas对象下方新增一个Text对象,并将其命名为Win Text,并将其内容字段更改为Win Text;然后设置其Y坐标的值定位在75处并居中显示;最后将字体大小设置在24点;最后打开PlayerController脚本编辑窗口进行配置

把countText和WinText拖入到脚本组件。保存场景。完成!
