简单的2D射击游戏实践
Unity3D编辑器虽然从名字上看是个制作3D游戏的工具,但其实它也提供了2D游戏制作的相关资源和功能,而且使用Unity3D来制作2D游戏并不难,只要准备好相关的图片等资源文件,有一定的编程能力就可以动手了。
接下来的分享的一个小项目是作者刚刚学习Unity3D没多久的时候为了实践一些想法和巩固对Unity3D游戏结构与制作方法的印象而编写的,非常简单,也没有使用商店里的插件,编程的方式也是最基础的那种。
游戏未动,设计先行
编写一个游戏不能上来就着手编写代码,这样是什么都做不出来的。对于从零开始制作一个游戏这种情况而言,最先要做的一件事情就是设计。
设计的方式和过程那自然因人而异,可以用图形,也可以用文字,但目的都是一样的,通过某种介质大概记录下自己对游戏的想法,最后整理归纳出来便是设计的开始。
就本文要分享的例子而言,设计的描述如下
游戏主要展示方式为2D横版射击
- 限定地图大小
- 键盘控制移动
- 鼠标控制射击
- 镜头跟随角色
一些游戏的重点描述
- 简单的资源系统
- 玩家和敌人都存在血量
- 在完成一个关卡后可以在切换时消耗资源回复血量
- 关卡难度随着关卡编号和玩家等级变化而变化
简单的文字描述把游戏的大概设计确定下来,接着进行细分设计,鉴于Unity3D制作游戏时基本都以场景为单位进行,因此细分设计也直接按照场景分类
- 主菜单场景
- 该场景为启动游戏时进入的第一个场景
- 标题文字
- 开始游戏按钮
- 退出游戏按钮
- 游戏场景
- 游戏主要的游玩场景
- 地图展示
- 角色控制
- 敌人生成
- 资源生成
- 关卡出口
- 关卡切换场景
- 玩家角色在两个关卡之间暂歇的场景
- 角色信息展示
- 资源使用
- 存档按钮
- 继续按钮
- 退出按钮
有了细分之后就可以根据它来准备各种资源了,比如角色的图片资源,UI的背景资源等;在准备的同时可以画一些框图,将场景界面设计出来,方便制作时按图索骥。
- 主菜单场景设计图
场景中只有一个UI界面,标题文字固定为游戏的标题,玩家在开始游戏之前需要在输入框里输入自己的昵称,退出游戏会关闭整个程序。
- 游戏主场景设计图
其中主游戏窗口展示地图,玩家角色和敌人等物体,玩家信息主要展示玩家角色的头像,血量和经验值,资源信息则展示玩家角色在地图中收集到的资源情况。
- 关卡切换场景设计图
角色信息展示头像和血量等,资源使用情况包含资源的数值和使用方法的功能按钮,过场标题为文字,按钮部分可以切换到下一关或者存档,也可以直接退出当前游戏。
有了这些设计文字和框图,下一步就应该进入正式的设计阶段了,出于简单起见,概要设计文档就不整合了,直接进入UML用例图设计。
- 开始菜单场景用例
- 游戏场景用例
- 切换场景用例
至此UML用例图初步设计完成。
接下来进行功能细分,方便后续设计游戏的类图。
所谓功能细分就是要进一步细化每个场景以及每个用例中包含的功能,并且细化到单个方法的层次,这样才方便后续的类图设计。
鉴于用例众多,就不一一细分了,举例如下
游戏场景需要游戏地图,因此在进入场景时需要生成游戏地图
- 地图要有边界来限定玩家角色的运动
- 地图要有障碍来妨碍玩家角色的躲避
- 地图要有资源块来让玩家角色获取
操作角色运动用例
- 玩家角色对象要获取玩家输入操作
- 玩家角色要根据输入操作进行不同的动作
- 在没有操作时玩家角色要能回归静止
诸如此类的细分,当全部功能都细分完成后就可以进入类图设计,将整个项目的代码结构大概表达出来。鉴于涉及到的类很多,在此也不费过多篇幅,举一个例子如下
游戏中的地图是通过类似Tile-Based的区块地图生成方式随机生成的,因此需要一个地图相关的管理工具类。地图本身为18X18的正方形,每个格子为一个单位地块,单位地块可能是可