-
大家好
-
我是马克·布朗,我在开发属于自己的游戏
-
而这一切的开端,起源于 "学习如何开发游戏"
-
既是一件辛苦的事,也是一件很有挑战性的事
-
相信我,当我提到 "挑战性" 这三个字的时候……
-
额,这 "挑战" 差点让我还没开始就放弃了
-
下面,让我来讲讲这其中的来龙去脉吧
-
开 发 之 旅
-
但首先,我们先退回一步
-
回到一切的最初 —— 挑选一款游戏引擎
-
首先,我此处说的 "游戏引擎",是指一种能够帮你开发游戏的软件
-
它能替你完成那些游戏开发中最困难、最无聊的工作
-
譬如将图像渲染到屏幕上
-
适配各种键盘手柄
-
计算物理运动,诸如此类
-
除此之外,它们还会提供很多有用的工具
-
这些工具由专人设计,就是为了让你的游戏开发更轻松:
-
例如更简单的做出动画、或者UI
-
现在市面上的游戏引擎相当之多
-
单是那些最流行的,就有
-
Unity、虚幻、Godot, Pico-8, Game Maker, Construct
-
在这之上,还有专精于单个类型的游戏引擎
-
比如Twine、RPG Maker、Adventure Game Studio
-
甚至还有专精于特定平台的游戏引擎
-
比如 NS 上的《一做就上手 第一次的游戏程序设计》
-
PS4 上的 Dreams
-
还有Roblox,一款…额…Roblox平台的引擎
-
每一款都有各自的优点和缺点、铁粉和黑粉
-
但不管怎样,我只能选一个
-
所以,最后,我挑了……
-
Unity
-
我选 Unity 原因有好几条
-
它在 "功能强大" 和 "相对简单" 之间,似乎做得相当平衡
-
它既能做 2D 也能做 3D
-
尽管我计划中是要做一个2D游戏
-
但如果我最后改主意做 3D,使用 Unity 也不会迫使我学一个新引擎
-
除此以外,Unity 支持天底下的大部分游戏平台
-
所以即使我想把游戏放到 PS5 上,也并非技术上不可实现
-
当然,有没有钱另说
-
然而,最重要的原因在于,Unity 的流行程度
-
许多游戏都使用 Unity 开发,例如《空洞骑士》
-
还有《茶杯头》
-
还有《糖豆人》
-
以及《胡闹厨房》
-
《都市:天际线》
-
还有《炉石传说》
-
它是目前整个 Stram 上最流行的游戏引擎
-
在最近的一次 GMTK GameJam 中
-
Unity 的用户,比其他所有引擎的用户加起来还要多
-
而这种流行度对我来说非常重要
-
因为它意味着,能够帮助我的人也更多
-
更多的教程、资源、素材、插件
-
以及当我遇到困难时,更多用来求助的人
-
比如说,在我的 GMTK 聊天群中,有一大群会用 Unity 的群友
-
而且,我还认识几位 Unity 大佬
-
比如 BlackthornProd 的 Noa、以及 Mix 的 Andre
-
还有 Jam,看名字就知道他能教我做 GameJam 了
-
啊,刚才那个笑话有点冷
-
总之,这就是我的决定
-
抱歉啦 Godot 粉丝们,本系列将专注于 Unity
-
那么,第一步做完了:挑选游戏引擎 - 完成
-
加下来是第二步:学习如何使用它
-
折磨开始
-
就像我说的,Unity的教程真的很多
-
而这些教程,正是我最开始学习时,选择的方法
-
我打开 YouTube,搜索 "Unity 教程"
-
然后找到了一堆
-
看起来就很懂的人,教我怎么操作引擎
-
然后他们向我展示制作游戏的过程,我也矜矜业业地照做
-
他们点一下方块,我就点一下方块
-
他们写一行代码,我就也照着写一行
-
不久,我就做出了一款可以运行的游戏,这感觉……非常赞
-
但紧接着,几周过去
-
我终于决定,打开一个空白的 Unity 文件,然后检验一下自己的学习成果
-
而我得出的结论是……
-
什么都没有
-
我,什么,都,没学到
-
就好像教程里说的每句话,在我这里都是 "左耳进右耳出" 一样
-
我甚至不能让自己的角色出现在屏幕上,更别提让它们动起来了
-
糟糕透顶!
-
说白了,这其实是我的错:
-
在最近的一期,我做的有关于策略游戏的视频中
-
提到了它们使用的 "点击这里"、"点击哪里" 的箭头
-
并指出了这种教学,不会有任何效果
-
我在学 Unity 的时候,用的就是这种思路!
-
我是我自己的反面教材
-
我骂我自己,绝了!
-
而且,说实话,这真的很丧气
-
让我感觉自己像个弱智
-
白白浪费了好几周的时间
-
我甚至没法确定自己是不是真的适合开发游戏
-
如果我甚至没有看完一套教程、并从中学习的能力
-
可能是我天生不配吃这碗饭?
-
也许我应该呆在自己的舒适区里
-
当时是几个月前
-
那是我正在计划这个新系列的制作
-
而当时我在想,也许我应该取消这个项目
-
也许我不应该告诉任何人,假装这个计划并不存在
-
因为这简直…惨的要死
-
太可怕了
-
然而,紧接着我想到了 Adobe Premiere (Pr)
-
也就是我一直用来制作视频的软件
-
这个软件也很复杂,然而我却明白它该怎么用
-
甚至可以说用得相当不错
-
那么,我是怎么学习 Pr 的呢?
-
当我还在 Pocket Gamer 上班时,我的工作是做基础的游戏测评视频
-
于是,一位同事教会了我 Pr 的基础使用知识:
-
也就是那些最基础的 "怎么做视频" 的知识
-
如何导入片段、如何把它们放入时间线
-
如何制作基础的转场,以及如何将它们导出到YouTube
-
在这之后,我用这些知识做了一大堆游戏测评
-
因此不得不一遍又一遍的,重复这些基础的步骤
-
最终,让这些操作深深的刻进我的大脑
-
再然后,我做了《游戏制作工具箱》
-
那时,我想让自己的视频看起来更有趣一些
-
我想要试试蒙版
-
调色
-
文字
-
转场
-
动画
-
以及其他各种有趣的事物
-
说实话,这些东西没有一项是简单的
-
但此时,我已经有两颗定心丸了:
-
第一,我不需要一次性学完所有技巧
-
只要我在每个视频中使用至少一个新技巧
-
我就可以缓慢地建立起属于自己的特效知识库
-
第二:因为在过去的视频测评中,我已经很熟悉Pr了
-
我已经把它用的很顺手了,所以即使会遇到一些问题
-
我也有尝试和探索的信心
-
或者说,至少,我知道谷歌搜索的时候应该用那些关键词了
-
因此,最终我为了学习Pr,遵循了一个相当巧妙的三步公式:
-
第一步,只学最基础的,别的都不要管
-
第二步,通过重复、简单的项目,熟悉这些基础知识
-
然后第三步,随着时间慢慢的,在 Pr 中建立自己的认知
-
并逐渐建立一个属于自己的软件知识库
-
而这套流程,对我来说显然很有效
-
现在的我,已经会用 Pr 了
-
基本上,任何我想要的效果,我都可以做出来
-
而且,我也自认为了解其背后运作的原理
-
想想看,视频制作通常由一些点子引出:
-
例如 "老式录像机的暂停效果,做出来一定很酷吧!"
-
然后我需要弄清楚如何实现这个想法
-
比如,我怎么才能让画面暂停呢?
-
然后,我该用什么特效来实现这种效果?
-
然后,我要怎么做出那种视频刷新撕裂的感觉?
-
如果你细想下去的话
-
我能有无数个这种点子
-
因此,想要一次学会视频的 "通解" 根本是不可能的
-
但是我能做的是,建立我与工具之间的羁绊
-
然后,当一个新点子出现时
-
我才能有靠自己研究明白的
-
信心和手段
-
而且因为我已经了解了软件的运作方式
-
所以我也清楚问题所在,以及应该用什么关键词来搜索
-
也知道如何向别人求助
-
兄弟,只有我觉得这听起来很像…游戏开发吗?
-
你有无数个潜在的点子,随时可能出现
-
要一次学会点子的 "通解" 是不可能的
-
所以你所能做的,就是尽可能让自己熟悉手中的工具
-
确保当问题出现时,你能想出解决办法
-
那么,也许我应该带着我的 "三步学习结构" ——
-
基础、熟悉、实践
-
—— 然后把它们应用于 Unity
-
听起来可行
-
那么,试试吧
-
幸运的是,在游戏开发方面,我并非是完完全全的 0 基础
-
我多少还懂一点基础的编程
-
最起码我的陌陌个人资料上是什么写的
-
我大概懂一点 if、循环、函数这些概念
-
而且我之前玩过一下 Game Maker
-
所以我也多少知道游戏引擎的运作方式……大概
-
但我还是需要了解 Unity 究竟是怎么运作的
-
因此,我选择从最基础的开始学起
-
比如,软件界面是什么
-
我应该点击哪里
-
有哪些键盘快捷键
-
以及其他类似的知识
-
我也需要从概念上了解 Unity 的运作原理
-
譬如,举个例子,Unity 是围绕着 "游戏对象" 运作的
-
而 "游戏对象" 即是 Unity 中的一切
-
除非你彻底理解它是什么,否则你就无法推进
-
如果你好奇的话
-
"游戏对象" 简单来说就是一种隐形的容器
-
它拥有位置、朝向、尺寸
-
你可以在其中填入各种原件,来让它做不同的事
-
包括能让它变得可见的 "精灵渲染器"
-
能够赋予它物理性的 "刚体"
-
能够让它与其他物体碰撞的 "碰撞体"
-
以及最重要的,脚本,可以让你为其编程
-
当我了解这些知识后
-
我整理了一份清单,列出了为了制作游戏,我真正需要知道的事情:
-
例如,我该如何让两个游戏对象互相交流?
-
我该如何生成和删除游戏对象?
-
我该如何让游戏检测两个游戏对象的碰撞体,并在相撞后作出反应?
-
我该如何制作 UI、音效、动画?
-
我该如何处理关卡、死亡、这类的事物?
-
在这之后,我看了一些教程、和其他人交流了一番
-
从而弄明白这几个问题,掌握 Unity 的基础
-
不过,当然了,我相信有不少 Unity 玩家也会看到这期视频
-
你们可能会觉得这个列表不够全面
-
没法让我有多少进度
-
而且可能,不对——
-
是一定,有比我接下来使用的方法更好的解决方案
-
确实是这样
-
但这对于一个开始来说,已经足够了
-
我将能够让物体出现在屏幕上
-
让他到处移动
-
让碰撞成立
-
生成物品,再删除它们
-
—— 这就是游戏底层的运作方式
-
而它们与游戏的类型无关
-
不论我打算做什么,这些知识都会派上用场
-
它是一条起跑线,是我往后用来建造知识库的基石
-
然后,接下来是第二步
-
我要证明自己真的了解、熟悉了这些东西
-
—— 通过重复制作简单的项目
-
而在游戏方面,我发现的最好的方法是一种古老的艺术 —— "抄袭"
-
我的意思是说,通过复现非常简单的游戏
-
也就是那些古早游戏、手机游戏、网页游戏、或者小游戏……
-
那些玩法和规则都非常基础的游戏
-
通过复现它们,我可以向自己证明,我真的理解了Unity的运作模式
-
我认为这是一种很好的训练方式
-
因为这样你就不需要担心美术、设计、游戏规则这些东西了
-
—— 前人已经帮你完成过了
-
你只需要关心编程就够了
-
由此,你就会得到一个清晰的目标:
-
我能不能靠自己的能力,在 Unity 中,重新创造这个游戏?
-
我挑选的第一个游戏,是《Flappy Bird》:
-
一个手机端的杀时间利器
-
讲述了一只大胖鸟只身对抗重力的传奇故事
-
是的,没错,网上有一堆 "怎么做《Flappy Bird》" 的 Unity 教程
-
这种教程恐怕有一万部
-
但我一个也不想参考
-
我只想靠自己的力量完成它
-
因此,我开始玩这个游戏,探索其机制
-
然后就重新创造它的目标,列一个计划
-
重要的是,这些一步一步的目标必须尽可能的详细
-
比如说,第一步,让鸟出现在屏幕中
-
第二步,让它可以下落
-
第三部,让它可以上升
-
一件一件来,步子不要迈太大
-
然后,我开始了我的制作
-
我首先创建了一个游戏对象,用精灵渲染器将它变成一只鸟
-
用动画控制器让它可以飞
-
导入一个刚体让它可以下落
-
一个盒型碰撞体,让它可以和水管相撞
-
还有一个脚本
-
让每次按下空格键都可以给予它一股向上的推力
-
从而让鸟儿在空中上下翻飞
-
好耶!
-
然后我制作了水管,并把它们变成了预制的GameObject,或者说 "预制件"
-
这能让我在不同的高度上,生成无限多的它们
-
也就是这时,我发现了一个游戏开发的小窍门!
-
想想看,这个游戏符合直觉的制作方式是让鸟儿向前飞,穿过水管
-
但那做起来有点太难了
-
更简单一点的方法,是让鸟儿停留在原地不动
-
然后让水管整体向后移动
-
一旦某个水管移出了画面,就删除它
-
不瞒你说,想出这个方法时,我感觉自己简直是个天才
-
我还整理了一下碰撞,当鸟儿撞到水管时,游戏就结束了
-
同时,如果鸟儿从两个水管之间飞过,就会在UI上为玩家加一分
-
而这涉及到从一个GameObject向另一个GameObject发送信息:
-
我在基础课程中学到的每一项技能发挥了出来
-
最后,我添加了一些音效
-
以及带有时差效果的云彩,来完成这个游戏
-
而这感觉……超级棒!
-
我明白这成品看起来很土:
-
你可能会想,不过是抄了个全世界最简单的游戏
-
这家伙有什么脸这么骄傲?
-
可我就是骄傲!
-
我真的非常,非常,非常为自己骄傲
-
我挑选、分解了一个现有的游戏,并且靠自己的力量在 Unity 重做了出来
-
我证明了自己对于 Unity 的理解
-
而这一切全靠我自己
-
这感觉棒极了
-
尤其是和我之前丧气的情绪相比
-
事实上,因为这太爽了,我马上又做了一次
-
这次的游戏是《啪啪解锁》
-
围绕着一条不停旋转,收集其他圆形的长条设计
-
同样的,很简单,但也很上瘾
-
整个过程基本没什么差别
-
玩游戏,对它进行逆向工程,制作一个游戏制作计划书
-
然后让每一步越详细越好
-
例如让物体在屏幕上旋转
-
然后一步一步的建造它
-
而这一回我确实遇到了一些问题
-
因为游戏是围绕着旋转来设计的
-
而 Unity 中的旋转使用了一种叫做 "四元数 " 的东西
-
就像一个四维的、旋转的、轴
-
而读到这里的时候我的大脑一片空白
-
看起来超出我的理解范围了
-
但我同样还发现了一份 Unity的预制函数 ".RotateAround"
-
它允许你围绕一个点旋转游戏对象,这就解决了很多问题
-
而这个技巧,从今天起就进入了我的知识库收藏
-
我还搞明白了父子项目的含义和关系
-
而这也解决了我的很多问题
-
再一次的,我做出了一部可以在自己电脑上运行的游戏
-
而这在当时,感觉真是非常之帅!
-
我无法描绘这种感觉,但总而言之就是:我做到了!
-
我设立了目标:做这款游戏
-
而我完成了
-
而最重要的是
-
我证明了自己对于 Unity 的理解
-
并且正式开始于自己的工具建立羁绊
-
当我在做这款游戏时,我所遇到的困难
-
是最初的我绝不可能解决的
-
但现在则不一样,我知道应该点击哪里,看向哪里
-
也知道应该在谷歌搜索什么
-
目前为止,我可以说是和 Unity 相处的还不错
-
我仍然是个新手,但……
-
人总有一个开始的时候
-
而现在,我想是时候该正式进入第三步:
-
开始开发自己的游戏,开始实践了
-
当然,我肯定还会遇到不少问题
-
肯定还有很多我不知道的事
-
也终将会面对一些难题
-
但现在,我对自己的工具已经有了足够的自信和手段
-
我在底层概念上理解了 Unity
-
我理解了那些我需要知道的基础知识
-
因此,即使我碰到了问题,也可能亲自解决它
-
至少,我可以左右试试,或者在谷歌中搜索正确的关键词
-
亦或是向那些比我聪明的多的人,问一些有用的问题
-
我没法向你保证这种学习方法对你也适用
-
每个人学习的方式都不同
-
也许你更喜欢有那些,看起来就很懂的人手把手教你
-
但对我来说,那些面对教程很容易困倦的人……
-
也许是我有多动症,我不清楚
-
对于那些需要实践、尝试和失败
-
才能真正学到东西的人来说,这种方法很有效
-
先学基础
-
让自己熟悉它们
-
再一步一步构建自己的知识体系
-
至于我的成果如何,我想就要等到系列的下一期了
-
因为我正打算开始做自己的游戏,就从原型开始
-
我希望你能加入我的旅程
-
不过就目前来说
-
我知道这并非是一个教程系列,但如果你希望
-
让我教你一些 Unity 的基础知识的话
-
那么,就在评论区留下你的想法吧
-
如果我有时间,也许会出一系列的短视频教程,让你能跟上本系列的内容
-
不过现在嘛,感谢你的观看
-
我们下期再见
-
这灯的电池好像马上就要用完了
-
灯宝,干得好,我为你骄傲