主要内容
1. 设置2D环境
设置2D工作环境是开始游戏项目的第一步。
设置方式有两种:
1)新建项目时,在下拉菜单“Template”选定“2D”
2)游戏开发过程中,在Edit/Project Settings/Editor中调整“Default Behavior Mode”
设置工作环境后,导入的新图片素材的材质类型会默认为Sprite,而不是Texture,场景视图(the scene view)也会预设为2D。
2D模式中采用完全的正视图视角来呈现2D游戏,同时隐藏右上角的Gizmo(小辅助工具)。
2. 设计游戏背景
1)在Photoshop中勾勒关卡雏形,设计出每个图层
2)将这些图层导入到Unity,在Inspector窗口中将Texture Type设为Sprite
3)为了呈现出背景的视差,可以将背景元素放在命名为“Background”的Sorting Layer中:
1. 通过Edit/Project Settings/Tags & Layers打开Sorting Layers创建排列层并调整它们的位置
上图为常用的Sorting Layers:Background(背景层),Character(角色层),Foreground(前景层)和UI(用户界面层)。
Sorting Layers的顺序并不是随意的,排列层的编号越大,显示的位置越靠前,所以前景层应该设定在背景层下面。
为什么呢?
因为渲染(Rendering)顺序是从编号0的排列层开始,先被渲染,就先被铺在下面一层。
2. 将所有背景元素安排到Background上
3. 再通过精灵渲染器(Sprite Renderer组件)的Order in Layer给它们在Background层上排序
4. 设置好后,在Layer中将Background锁定,这样就可以避免在编辑前景元素时移动背景元素。
4)由于背景元素仅用于装饰,不需要其他组件,所以可以把它们放在一个空对象中,并在空对象中放入命名为Background Parallax的脚本来处理视差。
3. 设计角色活动的前景空间
每一个前景元素都需要碰撞体(Collider)来让角色与其发生接触。
Unity提供的多边形碰撞体(Polygon Collider)可以根据图片外形自动产生多边形碰撞体,而且用户可以通过增加、移动或删除节点来调整碰撞体的外形。
为了区别可接触的前景元素和不可接触的前景元素,需要创建两个功能层来将它们分类放入
官网关于Layers(功能层)的描述:
file:///D:/Unity2018.1.8/Editor/Data/Documentation/en/Manual/Layers.html
4. 设计角色
1)在Photoshop中设计角色形象。考虑到角色在游戏中并不是一个静止的图像,所以在设计时就要构思如何为角色制作动画(Animation)。在2D游戏中,角色动画一般有两种实现方式:
1. 将角色身体的各部分分开设计,单独运动,继而达到全身运动的效果
2. 画出角色动画的每一帧,连续播放以达到运动的效果
2)若采用第二种方式,直接将Idle(待机)状态的角色图片拖入场景即可(自动生成GameObject);若采用第一种方式,先为每个部分单独建立一个GameObject,然后将图片放入,
再新建一个空对象(这里命名为Ellen),使角色的身体各部分成为Ellen的子对象。
最后将Ellen拖入场景,并调整身体各部分的位置。
3)角色身体的各部分放入建好的Character排列层中,然后改变z轴的深度来改变显示的前后顺序。(也可以在Sprite Renderer中改变Order In Layer的参数)
4)在Ellen中添加碰撞体(Collider 2D)、刚体(Rigidbody 2D)、音频(Audio Source)、动画控制器(Animator)、控制脚本和攻击脚本等等。角色设定好后就可以到Animation窗口中设计每一节点的图画,建立待机Idle、跑Run、跳Jump、射击Shoot和死亡Death等的动画,并在动画控制器(Animator)中建立这些动画之间的联系。
5)如果角色的运动不由脚本控制,而是根据动画来位移,则勾选Apply Root Motion,否则不用勾选。
使用Animator控制动画动态的最大好处是可以调整动画速度来搭配物理速度,不需要作额外的判定。
6)让角色移动,需要给角色添加Ridbody 2D组件。同时我们也要根据输入的水平值是大于0或小于0来判断角色的面向方向。在Unity中,按左键会传回-1,按右键会传回+1。
5. 设置摄像机跟踪角色
在MainCamera(主相机)中添加CameraFollow脚本。
/*-----------跟随拍摄-----------*/
public GameObject player; /*角色的引用*/
private Vector3 offset; /*因为相机和主角不在一个平面,需要三维向量确定距离*/
void Start () {
offset = transform.position - player.transform.position; /*记录相机和主角的初始落差(距离)*/
}
/*LateUpdate函数在所用Update函数调用之后执行,跟随游戏对象的相机必须要放在这个函数里,因为游戏对象可能在Update函数里发生位置的变化*/
void LateUpdate () {
transform.position = player.transform.position + offset; /*根据初始距离计算位置*/
}
也可以使用良心到让人发指的Cinemachine(点击穿越)。
6. 完善玩法细节
出发角度包括:脚本、动画、粒子系统、BGM、与游戏角色发生交互的预制体等。
7. 构建游戏
File/Build Settings…
Build Settings窗口包括将在构建中被包含的场景列表(Scenes in Build)、可用平台列表(Platform)以及当前选择平台的设置。窗口底部是平台切换按钮(Switch Platform)和播放器设置按钮(Player Settings),以及构建(Build)和构建并运行(Build and Run)按钮。
Scenes in Build:场景列表包括所有在构建中被包含的场景,Unity在构建游戏时将忽略未在场景列表中的场景。如果场景列表是空的,Unity将构建一个可执行文件,但只会使用当前打开的场景。列表中场景的顺序不同会影响游戏的运行效果。
Platform:在开始一个项目之前,我们应该选择我们打算针对的目标平台。当前选择的目标将直接影响Unity如何处理项目的关键方面,例如导入资源。切换目标平台将影响整个Unity编辑器中的许多设置。为多个目标建立一个代码库是可能的,通过一些技术就能实现,例如平台相关的编译。
路过的圈毛君:“安利一个B站的视频 https://www.bilibili.com/video/av3246302 ”