撰写了文章 更新于 2019-03-16 19:29:25
Unity到底该怎么上手
首个难关
“香草味”的Unity
香草味(Vanilla)、原生而未加改动的 Unity,就这样摆在这里:一个现代化的“超级”引擎,有着你能想象到的一切功能:动画、图形学、声音、NavMesh 解决寻路、时间轴、网络编程接口、UI、场景切换、Mono Behaviour 运行时以及其提供的各种便利:碰撞检测、初始化、每帧运行的Update();在编程上,你还有各种各样方便的机制:EventSystem、Scriptable Object 等等,你能在你的代码里随处使用 GameObject.Find() 和 GetComponent() 来想获取什么就获取什么,你有 Asset Store 能获取无数现成的资源和插件工具……
说到这里,事情已经有点不太对劲:所有这些功能都有了,我的游戏该怎么搭建起来呢?
软件不是糊出来的
我猜很多人——无论是其他领域的开发大神还是从 Unity 开始编程的小白,都有过“靠着 Find 和 GetComponent 四处飞代码,最终‘糊’出来一个游戏 Demo”的经历。
问题就在于:引擎本身纵使提供了强大的运行时,帮你处理了很多不属于游戏编程的问题,但这些 API 依旧是“无机”的,而想要做出游戏,我们会面对很多需求,我们需要一些“有机”的、高度组织的系统——程序员“糊”代码,所有人难道跟着程序员一起“糊”游戏?
所以这就是我的意思:新人的首个问题就是:我怎么搭建一个好用的架构来优雅编程,而不是写出一坨意大利面?这是一个新人从入门到中级阶段的学习过程所一直围绕的问题。
有些书一如既往地千篇一律
每当我看到一些书长篇大论、事无巨细地讲述 Unity 本身某些功能,以为这样就能让新手做出些游戏、积攒自己经验的时候,我都想对这些作者说:你们恐怕根本不知道如何让人的技术获得成长。
学习“无机”的部分具体该怎么使用从来就不那么重要。学习、开发过程中唯一重要的事情就是利用这些方便的无机部分,通过编程高效地搭建起有机的游戏。我看到一些声称自己高大全,能让人“精通 Unity”的教程和书,干的事情无非是重复一遍官方手册、文档,更有甚者声称自己在教 Unity 实际干的几乎是教你使用 DCC 来产出3D、2D 素材,或者进行图形学设置等——这有用,但在初期一点也不重要。它们脱离实际场景,没有将各个功能机制的使用有机结合在一起,由小见大地教会读者如何构建起一个游戏,而只是干巴巴地对着一些很幼稚的示例代码去讲。这么学能学好才怪。
游戏软件和其他软件相比实在是太过特殊了,我当然知道 Unity 有许多开发框架,他们把软件开发中的通用理论和其他领域的过往经验等运用到游戏引擎上——效果卓越,经历了无数企业团队的评估,最终投入到了生产环境中去,产生了无数的成功产品案例。
但正如许多前辈的教导一样:你难道是来学习使用框架的吗?
随着守望先锋团队在 GDC 上介绍自己对于 ECS 框架、思想的成功应用和实战,各路豪杰都跃跃欲试,其在 NetCode 等方面带来的巨大好处有目共睹,实用主义精神——什么方法好用用什么,再次胜利了(当然,谁叫暴雪团队全都是 In-House 的工具,想怎么改怎么改)。这无异于一场大翻盘,有人甚至宣称这是革了OOP(面向对象)的命。
游戏开发,单就编程(排除 DCC 等已经形成工业界标准的生产流程)而言,尚没有像其他领域一样形成针对某个开发环节、几乎成为业界标准、人人都要或多或少学会使用的框架。这恰恰证明了游戏开发的特殊性:虽然有一些模板定式(比如 RPG、FPS 等类型,总有一些定式),但需求总体上依旧千奇百怪,想要构建系统以及让工具变得好用,方便非技术人员提升工作效率(比如 UnityEditor 编程)——对不起,您往往必须自己上手,具体问题具体分析。
让香草味 Unity 变成巧克力味的
对于进阶新手,我强烈推荐这一个配有 Demo 工程文件的视频教程:
来自 Unity 官方的 Adventure Game Tutorial(YouTube需要科学上网)
这个官方教程总共有 7P 之多,但非常之精彩。我准备将他们翻译并添加字幕并上传到 B 站(工程量很大,需要有人帮助,如果有意向请奶牛关私信)。
当你看完官方明摆在 Unity 启动页的 人物走动、2D Gamekit、滚球游戏、太空侵略者这些面向纯新人、开始上手实现初具规模的游戏需求的时候,不要在官方教程的“Scripting”、“Interface Essentials”、“Best Practice”这些区块瞎看,尽管看起来他们和我们的主题有很强的联系——Scripting 部分的教程编排很糟糕,费了很大篇幅讲一些通用基础编程知识;Interface Essentials 是对手册的视频化补充而且简单得要死;Best Practice 根本不是初学者该看的。
而这个教程,名字很傻,“冒险游戏教程”?
但摆在其他所有教程之前位处第一个自然是有理由的,它确确实实能帮你大忙。
为什么呢?我们不妨先看看这个教程涵盖了什么:这个Demo是一个点击冒险游戏,玩家通过点击画面操作角色移动。游玩过程非常简单:女主想要混进一栋大厦,但是大厦有保安和镭射门禁,你无法进入。玩家需要走出大厦进入市集场景进行点击解谜,收集面具伪装和咖啡,回到大厦伪装成给老板送咖啡的秘书,骗过保安打开门禁,顺利潜入。
就这么一个非常简单的需求,很多游戏设计都会出现,但只要你稍微想一想,就会一拍大腿。
“简单个屁”。
糊代码当然容易,但是构建一套系统减少工作量,减少胡改代码,要是能将重复工作变成 GUI 操作、功能模块包装到一起那是更好,当然也更难。
于是两位主讲人将整个教程Demo的任务分为6讲,而为了这六个小目标,我们要学会 Unity 这个引擎中的很多东西:
- 玩家角色
- EventSystem
- NavMesh
- Animator
- Prefabs
- 道具系统
- UI 系统
- Editor 编程(修改 Editor,也就是使用 UnityEditor )
- 条件机制
- 编程范式(设计模式)
- 可编程物体
- 泛型
- 继承
- 扩展方法(Extension Methods)
- 反应(行为动作)
- 多态
- 进一步修改编辑器
- 序列化
- 可交互物体
- 可交互物体的几何
- EventSystem
- 可交互物体-总结
- 游戏状态(创建一个系统,加载场景并且保存住游戏状态)
- Scene Manager
- ScriptableObjects 作为暂时数据存储
- 委托、事件
- Lambda 表达式
结论已经不言自明:这个教程从来没有集中地、一股脑地讲某某方面知识点,而是通过游戏实际情景和我们编程中实际遇到的需求入手,将 Unity 以及 CSharp 编程当中许多的进阶概念引导出来,从而,你学会了搭建一个靠谱有序的、可扩展的游戏代码框架。
香草味 Unity 变成了巧克力味 Unity,你不用面对”原生“系统处处糊代码了。
更新:视频(第一期)
https://www.bilibili.com/video/av46104000/
目录
路人王小二 1年前
发布
kendall 1年前
LinkAdrifting [作者] 1年前
发布