我的游戏开发学习路线
本文用于解决在各种情况下被问到是如何学习游戏开发的等类似相关问题。
本文为“游戏开发”相关内容。“游戏设计”在另外一篇文章里。
首先要区分一下具体工作职责,我的技能点全都是向着游戏性和游戏项目架构方面发展的,兼修了少量TA,基本完全没有算法或网络方面的相关能力,所以我的经验并不适用于所有游戏行业的职位,更不一定适用于所有人,仅供参考学习交流使用。
每段的折叠部分为可供参考的内容,不一定有用,不一定好用,自行取舍。
我在初中和高中都没有参加过信息学奥赛或类似竞赛,事实上还被NOI带队老师认为太菜了就应该好好高考而劝不要再想这方面的事情。所以一切都是从高考结束后进行的完全零基础起步。
【所以也告诉我们不需要什么特别“扎实”的“底子”也是可以做游戏开发的,不要妄自菲薄或者觉得自己起步太晚之类的——都不晚,只要开始学,就都不晚。】
完全新手
首先是编程语言入门。
完全可以直接从C#开始学起,不过我是从C开始学的,看的书是《C Primer Plus》,进行了最最基础的编程语言学习。
然后就直接开始了Unity入门学习,当时是2017年,Unity5时代,教程就是Unity官方的系列教程,在YouTube上就有的那种。但近些年来Unity推出了更成体系也更好的系列教程,在Unity Learn上的Pathway里面的
《Unity Essentials》(https://learn.unity.com/pathway/unity-essentials )
《Junior Programmer》(https://learn.unity.com/pathway/junior-programmer)
两套课程足以进行新手入门,它们涵盖了基本上所有的基础功能的最基本使用方法教学,以及少量的设计开发和编程能力练习与讲解。
【所以也并没有一个界限,像什么C#学到了什么程度才能开始学Unity,或者说一定要有多少编程能力才能开始做游戏——入门阶段并没有那么多讲究,只要你“开始”了,就是好的】
已过时的成套教程,可能会有Pathway中没覆盖的内容,但应该是不会有的
Tanks: https://learn.unity.com/project/tanks-tutorial
Space Shooter: https://learn.unity.com/project/space-shooter-tutorial
Survival Shooter: https://learn.unity.com/project/survival-shooter-tutorial
新手入门
通过自己的琢磨与折腾,经过了半年多的学习,我自行尝试做了那么一个小游戏,即av20370875。完全自制,功能方面的插件仅使用了NGUI和iTween,艺术素材都是商城的免费素材或是从东方的游戏中提取出来的。做了三个星期多,收获颇丰。
但此时也意识到,仅仅是学会最基本的功能和业务,那也就只能做这种十分小型体量的游戏出来。而且即使是只有这么点内容的玩法,开发时依然比较吃力,且有不少想法因为完全不会做而被删减。那么如果想要能够实现更多更复杂的玩法,就还是需要更深入和更广泛的学习。
但事实上,成体系的教程在这一阶段就基本上很难找到了,基本上到了具体问题具体分析具体方法的时候,也就不再那么容易地就有能让所有人学了都有用的包含大量内容的教程了。
随后半年,又(非常没有b数地)和小伙伴做了一个想发售的游戏,即av21727110,
当然做到后面就发现了设计能力和开发能力都完全跟不上想法,所以它并不能做出来……
【所以多写多做多练是很好的学习手段,最基础的内容掌握后,是不再那么容易地能找到能够让人成体系进步的东西的,而应当从实践中进步,更后面的路需要自己探索】
UnityLearn Pathway:Creative Core,比较新的教程,稍微更详细且深入地讲解了引擎内的一些功能:
https://learn.unity.com/pathway/creative-core
官方教程系列《Adventure》,这篇并不是很好,主要虽然是讲使用ScirptableObject做架构和编辑器拓展,但讲法显得很呆:
https://learn.unity.com/project/adventure-game-tutorial
更好的选择是UnityDevCorner的ScirptableObject主题:
https://unity.com/how-to/architect-game-code-scriptable-objects
入门
等到有了不少实践经验后,就逐渐能够发现自己具体需要在什么方面进行更深入的学习了。那比如我自己就发现了需要大幅提升编码业务能力和相应的架构能力,这样才能有能力去实现自己想要的玩法。那于是我就找到了与设计模式、游戏性业务等内容有关的东西来学习。
设计模式有很多相关数据,因为讲的都是GoF提出的23种DesignPattern,所以随便找本看得顺眼的就行,Java版的都行。具体游戏性业务是在偶然间找到了培训机构放出来的课程,这类培训机构有很多,虽然基本每年都会有更新的内容,但这一阶段实际上能提供的内容也大同小异。虽然里面大多数内容都没有直接被用到,但还是深受启发收获颇丰。
以及更进一步的基础知识需要学习,这里推荐《游戏引擎架构》和《.Net CLR via C#》,前者是游戏引擎的基本知识,用来更进一步地了解游戏引擎是怎么运作的;后者是更进一步的C#编程基础知识,全面而深刻。
《游戏引擎架构》和《.Net CLR via C#》本站提供电子书下载:
https://droylouo.com/MSE5OI/?/EBook/books/3/
举例培训机构的课程:
https://www.bilibili.com/video/av374768412
类似培训机构网上很容易找到很多,直接挑里面自己不会的看就行
Unity的UI:
文档:
https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/index.html
UI优化细节:
https://learn.unity.com/tutorial/optimizing-unity-ui
理解资源与对象(Asset | Object):
https://learn.unity.com/tutorial/assets-resources-and-assetbundles
https://learn.unity.com/project/getting-started-with-addressables
以及适当地理解ECS与JobSystem:
https://learn.unity.com/tutorial/entity-component-system
优化运行的细节:
https://learn.unity.com/tutorial/fixing-performance-problems
使用Odin进行更好的编辑器拓展:
https://assetstore.unity.com/packages/tools/utilities/odin-inspector-and-serializer-89041
还有一些特题特解的东西,重要的是学习和理解里面的基本原理,并以此来扩展到自己知识体系更深入更广泛的地方去:
一个最基础的FSM:
http://wiki.unity3d.com/index.php?title=Finite_State_Machine
实现一套十分基本,但又能对3C有更深刻认识的角色控制器:
https://catlikecoding.com/unity/tutorials/movement/
如何设计并实现技能系统:
https://www.zhihu.com/question/29545727/answer/58589250
https://bbs.gameres.com/forum.php?mod=viewthread&tid=229210
https://bbs.gameres.com/forum.php?mod=viewthread&tid=222645
https://bbs.gameres.com/forum.php?mod=viewthread&tid=225054
如何刷怪以及由此延伸的其他游戏性问题:
https://zhuanlan.zhihu.com/p/53806267
如何设计并实现Buff系统:
入门初级
随后的两年中,在学期间的项目中努力做了很多内容。学校环境下的团队组织当然有它自己的问题,但也有其好处,最大的就是不用担心失败与风险。所以我激进地学习新技术并试图将其应用,激进地去尝试设计并实现相对于自己能力显得极为庞大与复杂的系统。
是的,这一阶段很容易就被那种能够几天做出来的、只能玩几分钟的小游戏的一次次成功制作而迷惑住,觉得自己好像很行,能够做很多小游戏——但小游戏和有规模的游戏是几乎完全不同的。
也不要因为觉得自己现在只能做这种小游戏,还不具备把它做大做复杂的能力,就不去做——如果你不开始登山,那永远也登不上去。即使明知自己做的大型系统会很丑陋很愚蠢,自己做的复杂逻辑可能非常呆逼非常难用,可是不去写垃圾代码做垃圾架构,如何能知道怎么写好代码做好架构呢?
千万不要陷入自我满足于小游戏的快感陷阱,也不要被未知的困难所吓倒。见得多了,做得多了,错得多了,才能进步。
切记,游戏开发不是做题,一切遇到的问题都要你亲自审时度势因地制宜地分析与解决,没有一劳永逸的通用解决方案,除非你做的游戏跟别人的游戏一模一样。
这一阶段可以参考的书籍如下:
https://droylouo.com/MSE5OI/?/EBook/books/1/
https://droylouo.com/MSE5OI/?/EBook/books/2/
做一套六边形网格地图生成:
https://catlikecoding.com/unity/tutorials/hex-map/
做一套完整的ARPG系统;
初级
这个时候,就已经能有一些属于自己的解决问题的方法论了。也到了具体问题具体解决的时候,项目中遇到了什么问题,就能够自行去发现问题,分析问题,然后去各个途径检索解决方法,最后加上自己的思考与理解,而解决这个问题。它可能是一个全新的技术,可能是一个架构思想的优化与实现,可能是一个具体玩法的实现细节。
他可以是是stackoverflow上一个普通的编程语言问题,可能是一个UnityForum上一个争论许久的帖子,可能是若干年前UnityBlog的一篇文章,可能是YouTube只有数千播放量的一个视频,
已经没有那种放出来能让大多数人从中受益的内容了,每个人要做的内容都不一样,项目不一样、团队不一样、工期不一样、习惯不一样,也就很难再有总是能奏效的经验能与大家分享了。
与君共勉。