Cocos Creator:快速谈谈游戏设计和开发方法

2024年5月16日05:16:13 发表评论 21 次浏览

在我的开发经验中,我一直都认为游戏开发很难,但是它不像汇编分析,因为如果到达技术细节,其实也就和一般的数据结构和算法一样,当然不是对比最底层的渲染算法实现;对于一般的游戏开发,我们只需要实际接触引擎API和非实际接触一些稍底层的原理就行。游戏开发的困难主要在系统设计上,游戏的方向是模拟或模拟现实世界,开发的工作就不仅限于简单的UI和业务逻辑实现了,它是把UI这部分做了极大的扩展了,以至于不会美术的全栈程序员将会遇到瓶颈,比如我自己,我也只会非常基本的UI绘制,更丰富的物体我就开始担心画的不规则了。不过主要原因还是精力有限,如果进一步在美术上扩展,我恐怕我自己应付不来。

Cocos Creator:快速谈谈游戏设计和开发方法

我的目标是想尽可能独立完成一个小游戏的开发,找出一般的游戏设计和开发方法,本文默认使用的游戏开发工具是cocos creator。说起来,我早年弄过unity 3d,算是学过一些细节,但是当时不会C#,也没有进一步深入到代码实现,而是花了很多时间在游戏元素制作上,这时候是会细节不会整体的系统设计,也是不会设计游戏的。后来还转过three.js,不过我认为这不大适合长期游戏开发,它的相关使用相对主流还是比较底层,而且没有对应的IDE。接着还转过layaAir,不建议学layaAir,它比cocos差很多,而且文档什么的都很差,总之,要不使用cocos creator,要不使用unity,如果是长期开发游戏,我觉得还是unity好一点。

Cocos Creator如何开发游戏?游戏是什么?

Cocos Creator:快速谈谈游戏设计和开发方法

游戏是依照一定的玩法规则的一系列操作活动吗?我想这是一般人对于游戏的常见认识,我认为这是一种比较狭义的认识,我对游戏认识上的改变来自我学了哲学里的认识论。前段时间我看了《鬼灭之刃》,这动画的剧情就很像游戏,不过很多日本动漫的剧情都是这样的,高潮的时候主角几个人分别对战几个敌人,简直就是《真人格斗》,然后各种回合制,感觉这样的有些流水就是,同质化。假设我要玩一个《鬼灭之刃》的游戏,我坐在房间里、椅子上,按着鼠标打开游戏,操作完菜单后进入游戏世界,我看到有代表自己的人物,其他人物,看到房子,树木,猫猫,狗狗,听到鸟叫声,背景音乐……

根据经验论,我就等于我的所有感知(触觉、听觉、味觉、嗅觉和视觉),我们从出生到现在获取到的所有感知都成为了记忆,这些记忆就是我的经验,而我的自我就等于所有经验的合集(可参考休谟对自我的论述)。我认为世界是真实的,是因为感知导致的,例如我视觉上看到热刺0-2输给了曼城,热刺输了已经是事实,而曼城大概率等于提前夺冠了。例如我的手拿起手机,触觉和视觉确认了手机,我们很自然会确定这是事实,而这台手机的事实就比珍珠还真。但其实我们做梦也是这样的,我们深度做梦的时候是不会知道自己在做梦的,这就是笛卡尔的“我思故我在”。即使现在不在睡觉,其实我们也没人可以绝对证明我们不是在做梦,只是人体的构造限制和习惯使得我们最好以醒来的世界为绝对的事实标准。顺便说一下,忘了是哪位生物学家,做了关于大脑分区的实验,形成后来大脑皮层功能分区的主要依据。例如电击皮层的某个位置,实验者会对应地做一些动作,或者听到了声音但实际现场没有这个声音,或者看到其他东西了但是实际没有等等。这种实验就很像程序中的hook调试,不提供真实的,而是直接模拟一个得到真实的结果。

当我打开菜单进入游戏后,我得到的知觉信息包括来自视觉和听觉,而游戏画面的所有元素和我形成了一个世界,仅仅这两种信息也能够让玩家产生真实感——就是我拿起手机的那种真实感,这种真实感使得我以游戏画面为中心的第二个世界形成了,玩家脱离了现实世界,进入了另一个世界。——而这,就是游戏的关键,游戏其实是一个二次元世界——玩家心理上脱离了现实而造成的。或者称为现场感或文学真实感都可以,现场感就是描述观众观看电影对于影片世界产生的真实感,而文学真实感也是描述观看文本产生的真实感——它们都有一个共同点,都是不现实的。不过这个还有待争议,毕竟依靠感知判断事实和这种其实没法完全二元区分,只不过我们对这种虚拟真实有一种贬义的偏好。

这也是为什么深度游戏上瘾会发疯,或者说玩家可能会把游戏世界当成真实世界了,或者看一本小说或一段新闻把里面的文本描述当真了——老实说,一般人都当真了,大部分人是没法发区分这种真实感的,也不是说大部分都是弱智,而是需要有这方面的知识然后又极为偏执的人才会去区分,否则我们都是靠习惯生活的。很多人把这种坏的后果归咎于大资本主义公司的阴谋诡计,但其实这本身就是游戏必备的特征,二次元世界的存在必然会导致一定概率的人深度上瘾,这个不需要引导,甚至不需要盈利,一个好的游戏就是一个很真实的二次元世界。

游戏是一个二次元世界,而现实的游戏规则我认为更多是开发限制导致的,等同于现实世界中我们不可能穿墙一样,无形中“不能穿墙”成了我们活着的规则,这种现实上的限制导致我们即使不刻意设计规则也会形成规则,更宏观的来说,生活就是一个游戏,到了时间就会出生,到了时间就会死去。

游戏设计:具体化视觉信息和听觉信息

Cocos Creator设计游戏的方法:一般的游戏只有视觉信息和听觉信息,听觉信息就是背景音乐和音效了,这部分比较简单,这里不详细说。而视觉信息成为了二次元世界的主要部分,当然一个游戏世界可能简单也可能复杂,不是每个游戏世界都有花草树木,也不是必须和现实世界等同才能产生真实感。

我们可以把游戏世界和现实世界对比起来,在现实世界中,所有东西都是原子构成的,而游戏中所有东西都是像素构成的。例如超级玛丽,画面元素包含主角人物、障碍物、敌人、装饰物和背景墙,另外可能还有子弹武器、增强道具等,然后通过任务关卡关联起来——其实这些描述已经能够抽象一般游戏的基本元素了,无论是大型游戏还是小游戏,基本元素也就是这些,也就是说,我们在设计游戏的时候需要考虑这些元素。

  1. 首先是主角,主角可以是人物、机器人、动物等,例如超级玛丽的主角是玛丽,极品飞车的主角是车。主角是提供给玩家控制和操作的对象。
  2. 然后是敌人,敌人的范围很广,一般来说,敌人指的是会造成主角伤害的物体,例如打飞机中,敌机发射子弹会对主角造成伤害。从敌人的角度来看,我们可以把大多游戏世界看成一种生存竞技世界,主角活着的意义就是为了继续活着;而我们真实的世界中,人活着的倾向也是为了保存自我,为了能够继续活着,而这种倾向使得游戏产生了趣味性。不过不是所有游戏都是有敌人的,所以也可以把这部分抽象为阻止主角继续游戏的设计。
  3. 道具是一种辅助主角活着的物品,例如生命恢复物品或武器增强工具等,道具可能可以一次性使用,或者需要使用多个道具合成一个道具。
  4. 装饰物品一般是静止的,倒不是说装饰物品不会运动,而是他们一般不需要我们过多的编程调动或者说这些对象更多是为了美化画面的需要,例如游戏背景、障碍物、石头、攻击特效、爆炸、河流、光线、雾、雨水等。严格来说,我们可以认为这些元素都是可选的,假如把这些元素都去除了,仅有主角和敌人,那游戏可以简化为专门伤害主角、主角如何逃避伤害,只不过画面看起来不好看。
  5. 关卡或地图,游戏剧情或故事的基本组成元素,通过一个一个的关卡推动游戏的发展。
  6. 任务或挑战,可以认为是关卡中的一个元素。
  7. 用户界面,非游戏世界的部分,这部分内容例如可能有用户管理、游戏商店、游戏结算界面等,用户界面也是一个发布游戏的必备元素,而这部分也是游戏开发里面——我认为是最简单实现的一部分。

Cocos Creator如何开发游戏?那么如何使用cocos creator实现以上元素?首先游戏世界的主要实体可分类为主角、敌人、道具和装饰物,从游戏开发实现来说,这些物体都是模型(model),一个模型就等于我们现实世界真实可见的实体。模型由材质(Material)和网格(Mesh)组成,材质确定实体的可视化外观,网格确定该实体的形状和结构;而材质由纹理(Texture)确定外观。这几个概念在cocos的使用中也是比较清晰的。

对于主角和敌人,除非极为简单的游戏,否则一般没法直接使用cocos内置的模型对象实现,也就是说你需要使用其它工具制作好模型导入到cocos中。在寻找第三方免费或可商用的模型的时候,一定要清楚模型的概念,只有同时有网格和纹理的才能直接使用,如果没有纹理图片,那表示这个模型就是光秃秃的,这种只能用于二次制作。

其实我们可以把游戏中所有元素都当成模型,无论是2D还是3D,无论是道具还是雨雾水,一个模型就等于真实世界的一个物体。我们自己可以尝试锻炼一下游戏思维,观察任意一个手机游戏,先不要考虑运动的部分,其画面的所有元素都是模型,一个最简单的打飞机游戏包含的实体包括:玩家飞机、敌机、玩家子弹、敌机子弹,就这4种模型,这样看来写个打飞机游戏是不是还挺简单的?

当然了,粒子类的元素是不归为模型的,cocos提供粒子系统,而粒子系统就是用于模拟一些微粒群的,例如水雾雪等,或者模拟一些特效,例如爆炸或者战斗特效,这些特效也正如烟水雾雪一样。粒子系统就是用来模拟自然界的这种物体的,而一般游戏引擎都会提供粒子系统。使用例子系统模拟的物体一般最终效果是动画,而这种动画也进一步加强了画面的视觉效果。

所以,进一步说,如果先不考虑运动,一个游戏世界构成的基本元素有两种:模型和粒子,你可以试图观察一些游戏分析下,把里面的模型和粒子一一提取出来。一般的特效元素都是例子,而粒子动画是用来播放的,如果不考虑美术制作,我们对于它的使用其实非常简单,只需要放置在合适的位置,然后更改active的值就好;和主角相关的粒子动画常见的场景例如爆炸、跳跃、撞击。

接下来是模型动画,这个内容比较丰富,例如骨骼动画;和上面粒子动画不同的是,这里强调的动画是可编程的,而不是一次性播放的,不过这个运动特性一般来自外部制作工具,这种动画增加了模型的灵活性和自然性。不过雾也会运动,严格来说和上面的动画也是一样的,只是从实现上看,粒子动画一般是基于粒子系统实现的。

最后是模型运动,大致和模型动画一样,它也是强调可编程的动画,不过更多偏向于原始模型属性的更新或运动变化,例如主角或敌人的跳动和行走。

那么一个游戏世界的元素就包括模型、粒子、模型动画和运动,对于分析已存在的游戏,如果按照这个方式进行划分可以对游戏的整体物体有清楚的认识;对于自己开发游戏,基于这个来思考也可以知道什么样的效果应该使用什么元素,例如一般静止物体都是模型,跑步追尾特效使用例子系统修饰,主角跑步使用模型动画(跑步的骨骼动画),主角位置移动在代码上更新就行;例如完整的跑步实现可使用模型动画+位移运动,其中骨骼动画定义了主角的跑步姿势,但是仅有这个动画,主角是没法向前走的,所以通过简单更新模型的坐标值即可实现主角的跑步效果。

游戏设计和开发方法:常见的游戏解构分析

Cocos Creator如何开发游戏

首先是最经典的打飞机游戏,这是射击游戏的基本形式,例如上面这个游戏,整个画面的游戏元素为:

  • UI界面元素:界面顶部的得分和路程、底部的操作、收集物品这些一般都设计为2D UI元素。
  • 装饰元素:首先是宇宙星空背景,然后是随机放置了几个星球,而这些星球也可以配上旋转动画,效果会更好。其它装饰元素还包括左上角的爆炸效果、玩家子弹、玩家飞机的的喷射效果。
  • 玩家:左下角中间的飞机就是玩家飞机,玩家左右两个飞机应该也属于玩家的飞机,主玩家发射的子弹是带特效的,而右边的玩家飞机发射的子弹比较简单。
  • 敌人:两台蓝色的飞机就是敌机。

其中爆炸特效一般使用粒子系统制作,主玩家子弹也可以用粒子系统制作、或者直接就是一张图片。如果你现在去游戏商店查一下打飞机的游戏,可以发现现在开发出来的打飞机游戏其游戏元素也就上面这些,不同的是特效变得更加丰富了,例如有些还加了类似魔兽英雄联盟的战斗动画,看起来非常炫酷。如果不考虑美术的工作,其实游戏的基本实现算法并没有重大改变,你甚至可以认为这些是同一套代码但是换了外观的游戏,如此看来,美术制作没准在游戏开发中超过了一般的程序员。对于我们游戏开发者来说,重要的是能够区分一般游戏元素的实现方式,如果被画面迷惑了那就不算一个合格的游戏开发者。

接着就是最古老的斗地主游戏了,也是棋牌游戏的经典实现,以下是欢乐斗地主的游戏画面:

Cocos Creator:快速谈谈游戏设计和开发方法

Cocos Creator设计游戏的方法:其实我刚刚试图写游戏就是想模仿斗地主进行练习的,但是发现不知道怎么实现,脑塞。现在我们来分析一下,看看如何实现。首先是使用2D还是3D实现?似乎2D更好一些,用3D也没什么问题。

  • UI界面元素:基本所有游戏都会有UI元素,在这个游戏画面中,UI元素包括顶部的时间wifi信号标志、中间的牌展示、右边的三个操作菜单、底部的用于金豆数、本局数据标识、倍数和聊天原始。
  • 游戏元素之玩家:画面有三个人物,如果你玩过斗地主大概知道这三个人物是会动的,说明人物使用了骨骼动画来实现;除了人物,还有玩家的金豆数、主角的牌、其他人的出牌、地主标识。
  • 游戏的装饰元素:首先是背景,然后是桌子,出牌钟表,金豆满屏特效;除了这些,一般还有炸弹特效、飞机特效。
  • 游戏的操作元素:例如上面的出牌提示菜单,这似乎作为UI元素实现也可以,但个人觉得直接作为游戏元素的一部分更好一些。不过区别不大,因为游戏的摄像机是固定不动的。

不过声音数据这里就不描述了,因为游戏开发处理声音一般都比较简单。

经过上面的分析,你会发现斗地主其实也是很简单的——不考虑自己完成美术,人物头像用骨骼动画,赚到金币可以满屏金豆粒子动画,炸弹则是使用爆炸的粒子动画,飞机则使用一个飞机模型+喷气粒子特效。

Cocos Creator如何开发游戏?以上的游戏元素拆解来自我的一些游戏开发的经验,整体来说可以首先对游戏分为UI元素和游戏元素,UI元素一般用于菜单操作,显示游戏数据,就是一般的APP开发中的那些界面元素。而游戏元素则是和游戏主线相关的,无论是静态还是动态,准确来说,游戏元素就是游戏世界中的所有元素,不过有时候UI元素可能会和游戏世界元素有所重合,这种自己看情况就行。

如何增强游戏开发能力?

如果你有编程基础,直接对照一些游戏示例开发教程跟着它的步骤操作就行了,按照它的步骤编写完整的小游戏,如果你能够这样模仿几个或者10个这样,基本上你已经能够掌握的游戏开发了,而上面讨论的不用多说都懂了。

不断抓细节学的意义不大,因为很容易就会丧失游戏开发的整体性和主方向,细节越深入就越难,如果把这些东西都解决了基本上已经无法开发游戏了。先对游戏开发的整体结构和思路有一个比较熟悉的了解,然后有必要再去研究细节。其它的没有更多要说的,所以这部分只能算是一个开发和学习的建议。总之,多写游戏项目,多分析开源的游戏项目,多分析现有的游戏,经验就是慢慢积累的,如果不常做游戏方面的工作经验相对就会少,经验多了游戏开发也就胸有成竹。

分析cocos creator官方弹弹乐3D游戏示例

游戏代码的github地址是:https://github.com/cocos/cocos-example-ball

这个游戏的官方说明文档不详细,当然了,主要原因是因为这个代码不是自己写的,一下子也就无法看得懂,这不像一般的后端开发或者前端开发。对于开发,首先要清楚的是需求说明文档和游戏的原型图,否则直接去看代码就懵了,容易造成:每句代码都看得懂,但是拼起来就不知道是什么意思了。这里主要的目的是走一遍这个项目的设计,对游戏开发游戏进一步的理解,因为多写和多看游戏项目都可以增加游戏开发的项经验。

首先,我们来了解一下游戏的玩法和目的,下面游戏的主要原型图:

Cocos Creator:快速谈谈游戏设计和开发方法

首先点击开始游戏,然后开始游戏,游戏过程中用手按住屏幕中间,向左滑动表示向左上跳,往右滑动表示向右上跳,结算界面显示分数和玩法提示。其中得分的规则为:跳中圆板的中心得2分,跳中圆板边得1分,吃钻石也能获得分数。

游戏的元素包括:

UI界面,包括开始游戏的界面,游戏结算界面,如下:

Cocos Creator:快速谈谈游戏设计和开发方法
Cocos Creator:快速谈谈游戏设计和开发方法

接着是主游戏内容:

首先是背景,属于装饰元素;游戏顶部的数字是试试游戏计分,属于UI元素。游戏的主角是一个绿色的球体,球体的拖尾效果,跳板,跳板中间的弹簧,钻石,得分显示,起跳弹板效果,下面是游戏主场景的截图:

Cocos Creator:快速谈谈游戏设计和开发方法

游戏的画面渲染元素的制作和构成

下面我们先来分析一下这个项目的画面元素的制作,一般来说,我个人习惯是先做好UI和游戏画面模型等,然后再来实现游戏的业务逻辑。

该游戏只有一个场景,算是比较简单的,但是并非说一个场景的游戏就很简单,因为很快你将会遇到需要多页面的场景,例如增加游戏聊天IM、道具商店等,这些都不是游戏世界的内容,如果这时用多场景制作会遇到一个常见的问题:每次新打开游戏场景之前的就会被销毁,新的就会被重新创建,最简单的例如用户头像更新的逻辑:在当前页面打开图像选择界面,选择完图像后返回上一级界面更新头像。正常来说,我们不希望当前页面被反复创建销毁,其中一个方案是将游戏的所有元素都放在一个场景中,通过Prefabs或者节点Node来实现多界面的效果。

对照上面的截图左边层级管理器:

  • Main Light是灯光,这里就是默认的平行光,这个对游戏没什么影响。
  • Camera是相机,相机的类型是正交相机,无论相机远近画面保持不变。
  • planeBg01是游戏的背景墙,它是一个平面plane模型,这个项目对背景的处理似乎有些复杂了,一般直接用plane平面+普通材质就好。
  • boardBox是游戏主要部分,实现跳板相关的逻辑。
  • Canvas部分就是全是UI元素了。
  • audioManager则是用来处理背景音乐和音效的。

Cocos Creator设计游戏的方法:其中游戏的背景实际上使用了标准的模型来实现,基本就是使用其它工具制作好fbx模型文件导入使用的。Canvas挂上游戏入口的组件脚本文件,cocos中的脚本一般默认就是组件,挂在一个节点上的组件会被默认初始化,也就是单例;另外也没有规定那个组件上的脚本才是严格的程序入口,只能我们开发者自己来逻辑上规定一个入口,一般的入口就是开始显示和处理UI的那个组件脚本。

关于游戏节点的更多信息:

  • startBtn创建了一个关键帧动画,一共4个关键帧,每个间隔15帧,变化属性为scale,值分别为1.2、1.4、1、1.2。点击按钮开始游戏,所以,逻辑上这里是游戏的入口。
  • tips2/hand节点有一个一个关键帧动画,这个动画的目的是展示左右滑动的操作。

游戏资源分析

游戏设计和开发方法:从哪里开始呢?毕竟资源的类型繁多,先排除场景和脚本资源,其它类型的资源有:动画剪辑、材质、模型、纹理/精灵、音频和预制。回想一下上面对游戏世界实体的分析,一个游戏世界的实体由模型和粒子组成,当然了,粒子也会用到网格和材质。

这里我们从最直观的方式开始:就是游戏的可视画面,然后是预制、粒子系统、材质、网格,一直到达最基本的纹理贴图。游戏的背景上面已经说了,它的实现比较简单,我们不一定使用该项目的方式进行实现,可以用plane平面模型+背景纹理图片就可以实现了。

这里我就取最直观的对象:主角,也就是绿色小球,预制文件夹中的ball就是它了,而它的模型来自model/ball,不使用默认材质,而是使用material中的ballHigh011,最终的纹理图片是ball/ballGreen01。下面详细说明每个预制文件:

  • tips:一个富文本UI组件,可能用于提示信息,显示找不到脚本,尚不知道是否会使用到。
  • ball:主角,绿色小球。
  • board:圆形跳板,使用fbx模型文件。
  • center:估计是一个跳板的中心面片,来自fbx文件。
  • diamond:钻石,来自fbx文件。
  • effectDiamond:钻石的爆炸粒子效果,用到fbx模型文件
  • effectLight01:主角小球的拖尾效果。
  • revive:游戏结算界面。
  • scoreAni:一个label,得分动态提示。
  • springHelix:跳板中间的弹簧模型,来自fbx文件。
  • springTop:弹簧顶盖。
  • trail01:粒子系统,拖尾粒子效果。
  • wave:上跳时在跳板上的那个动画。

其它资源就先不介绍了,点到即止。如果要深入囊括的内容包括cocos creator材质,模型制作,骨骼动画制作等,更多的涉及到美术上。

代码结构

时间关系就不再详细分析了。

总结

Cocos Creator如何开发游戏?本文是对游戏设计和开发的进一步清晰的解构,对于一般直接的游戏开发不会有什么帮助,只是一个整体的概述。主要的还是多使用cocos creator开发游戏,无论是跟着例子编写还是自行设计开发,只有多做才能够增加经验。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: