零基础学习游戏开发应该如何学习?
零基础学习游戏开发应该如何学习? 铁子,直接参加一个游戏开发的免费公开课你就大概对游戏开发的学习内容、板块以及报班还是自学就大概清楚了,当然免不了要被营销一波,但无所谓啊,想不想花钱还是取决于自己,放心,只要我穷,谁都要不到我的钱!有钱那就另当别论了,毕竟花钱提提速还是阔以滴!http://pic2.zhimg.com/50/v2-96eaadcc4ab7aac85ea9698b6d868d0d_720w.gif?source=1940ef5c
OK,上干货!Unity技能职级体系表!直接参照这个表那你就知道该学哪些内容了,也能知道需要学到什么程度!其中也有每周更新的商家免费公开课,需要的直接点击卡片↓↓↓查看就行哦!
点击查看获取最新unity技能职级体系表
游戏开发通常会分为:游戏前端开发、游戏服务器开发;
这里主要介绍游戏服务器的开发的学习;游戏服务器开发推荐一个网络游戏服务器框架 ioGame(集群、分布式、无中间件依赖、跨进程通信);
ioGame网络游戏服务器框架 · 语雀www.yuque.com/iohao/game<hr/>ioGame 网络游戏服务器框架简介
[*]国内首个基于蚂蚁金服 SOFABolt 的 java 网络游戏服务器框架;无锁异步化、事件驱动的架构设计
[*]通过 ioGame 可以很容易的搭建出一个集群无中心节点、有状态多进程的分步式游戏服务器
[*]无中间件依赖、代码即文档、JSR380、断言 + 异常机制 = 更少的维护与开发成本
[*]轻量级、启动快、更节约、更简单、开箱即用、无配置文件、超高性能
[*]近原生的快、业务框架平均每秒可以执行 1152 万次业务逻辑
[*]业务开发中自带神级特性:业务代码访问定位与跳转
[*]各个逻辑服之间可以相互的进行跨进程通信
[*]可同时与同类型多个游戏逻辑服通信
[*]支持玩家动态绑定逻辑服节点
[*]对webMVC开发者友好
[*]部署多样性
ioGame 是一个由 java 语言编写的网络游戏服务器框架。支持 websocket、tcp ,适用于全球同服、回合制游戏、策略游戏、即时战斗等游戏服务器的开发。具有高性能、稳定、易用易扩展、超好编程体验等特点。可做为 H5、手游、端游的 java 游戏服务器。
ioGame 是轻量级的网络游戏服务器框架,在使用 ioGame 时,无需安装其他服务,如: Nginx、Redis、MQ、Mysql、ZooKeeper、Protobuf协议编译工具 ... ...等。简单点说,就是无需安装其他产品就能使用;这意味着在使用上简单了,在部署上也为企业节约了成本。
通过 ioGame 你可以很容易的搭建出一个稳定、高性能、集群无中心节点、分步式、自带负载均衡、跨进程通信、避免类爆炸设计的网络游戏服务器。游戏框架借助于蚂蚁金服 sofa-bolt 通信框架来提供通信方面的稳定与高性能。
在 ioGame 中能让你遗忘 Netty,你几乎没有机会能直接的接触到 Netty 的复杂,但却能享受 Netty 带来的高性能。对开发者要求极低,为开发者节约开发时间。
即使之前没有游戏编程的经验,也能参与到游戏编程中。如果你之前具备一些游戏开发或者 webMVC 相关的知识,则会更容易上手游戏服务器的开发。
开发者基于 ioGame 编写的项目、模块通常是条理清晰的,得益于框架对路由的合理设计。当我们整理好这些模块后,对于其他开发者接管项目或后续的维护中,会是一个不错的帮助(模块的整理与建议)。
基于 ioGame 编写的项目,通常是语法简洁的、高性能的、低延迟的。框架最低要求使用 JDK17,这样即可以让项目享受到 ZGC 带来的改进,还能享受语法上的简洁。从 JDK17 开始 GC 已经处理得越来越好了,JDK17 中的 ZGC 远低于其亚毫秒级暂停时间的目标;当开发者使用 JDK17 时,相当于在你们的项目中变相的引入了一位 JVM 调优大师,详细请看 JDK17 垃圾回收GC性能飞跃提升。
在部署上,支持多服单进程的方式部署(类似单体应用、在分步式开发时,调试更加方便)、也支持多服多进程多机器的方式部署。在部署方式上可以随意切换,而不需要更改代码;日常中按照单体思维开发,在生产上可以使用多进程的方式部署;当然,也可以使用单进程的方式部署。
ioGame 框架职责清晰、业务开发几乎零学习成本、源码有高质量注释、示例多、使用文档多,开发体验最佳、对接文档自动生成、逻辑服之间可跨进程跨机器通信、业务代码定位--神级特性、异常机制。提供了丰富的在线高质量使用文档,为你的团队助力,带上你们的小伙伴一起,这样就不用手把手的教了。
ioGame 可以很方便的与 spring 集成(5 行代码)。
<hr/>ioGame 是国内首个基于蚂蚁金服 sofa-bolt 的网络游戏框架,游戏框架由 [网络通信框架] 和 [业务框架] 组成。
[*]网络通信框架:职责是各服务器之间的网络通信
[*]业务框架:职责是业务逻辑的处理方式和编写方式
网络通信框架 - SOFABolt
SOFABolt 是蚂蚁金融服务集团开发的一套基于 Netty 实现的网络通信框架。
[*]为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上,而不是过多的纠结于网络底层 NIO 的实现以及处理难以调试的网络问题,Netty 应运而生。
[*]为了让中间件开发者能将更多的精力放在产品功能特性实现上,而不是重复地一遍遍制造通信框架的轮子,SOFABolt 应运而生。
Bolt 名字取自迪士尼动画-闪电狗,是一个基于 Netty 最佳实践的轻量、易用、高性能、易扩展的通信框架。
业务框架
如果说sofa-bolt 是为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上。而业务框架正是解决业务逻辑如何方便实现这一问题上。业务框架是游戏框架的一部分,职责是简化程序员的业务逻辑实现,业务框架使程序员能够快速的开始编写游戏业务。
业务框架对于每个 action (即业务的处理类) 都是通过 asm 与 Singleton、Flyweight 、Command 等设计模式结合,对 action 的获取上通过 array 来得到,是一种近原生的方式。
业务框架平均每秒可以执行 1152 万次业务逻辑。
<hr/>架构简图
无锁异步化与事件驱动的架构设计、集群无中心节点、自带负载均衡、分布式支持、可动态增减机器、避免类爆炸的设计;
图中的每个游戏对外服、每个游戏逻辑服、每个 broker (游戏网关)都可以在单独的进程中部署,逻辑服之间可以跨进程通信(游戏对外服也是逻辑服的一种)。
游戏网关集群
broker (游戏网关)可以集群的方式部署,集群无中心节点、自带负载均衡。ioGame 本身就包含服务注册,你不需要外接一个服务注册中心,如 Eureka,ZooKeeper 等(变相的节约服务器成本)。
通过 broker (游戏网关) 的介入,之前非常复杂的负载均衡设计,如服务注册、健康度检查(后续版本提供)、到服务端的连接维护等这些问题,在 ioGame 中都不需要了,结构也简单了很多。实际上单台 broker (游戏网关) 性能已经能够满足了,因为游戏网关只做了转发。
逻辑服
逻辑服通常说的是游戏对外服和游戏逻辑服。逻辑服可以有很多个,逻辑服扩展数量的理论上限是 netty 的连接上限。
游戏对外服
对外服保持与用户(玩家)的长连接。先来个假设,假如我们的一台硬件支持我们建立用户连接的上限是 5000 人,当用户量达到 7000 人时,我们可以多加一个对外服务器来进行分流减压。由于游戏对外服扩展的简单性,意味着支持同时在线玩家可以轻松的达到百万、千万甚至更多。
在结构组合上(部署多样性)
框架的架构由三部分组成:1.游戏对外服、2.Broker(游戏网关)、3.游戏逻辑服;三者既是相互独立的,又是可以相互融合的;如:
[*]游戏对外服、Broker(游戏网关)、游戏逻辑服这三部分,在一个进程中;
[*]游戏对外服、Broker(游戏网关)、游戏逻辑服这三部分,在多个进程中;
[*]游戏对外服、Broker(游戏网关)这两部分在一个进程中;而游戏逻辑服在多个进程中;(类似之前游戏的传统架构)
[*]甚至可以不需要游戏对外服,只使用Broker(游戏网关)和游戏逻辑服这两部分,用于其他系统业务;
因为 ioGame 遵循面向对象的设计原则(单一职责原则、开闭原则、里式替换原则、依赖倒置原则、接口隔离原则、迪米特法则)等,所以使得架构的职责分明,可以灵活的进行组合;
架构优点
架构有很高程度的抽象,让设计者更加关注于业务,而无需考虑底层的实现、通信参数等问题。
逻辑服的位置透明性;同时,由于模块化、抽象化,使得整个架构各服务器之间耦合度很低,逻辑服注册即可用,大大增加了可伸缩性、可维护性,动态扩展变得简单而高效。由于逻辑服是注册到 Broker(游戏网关) 上的,所以逻辑服可以动态的增加、删除、改变;由于逻辑服之间耦合度较小,调试和测试的工作也是可控的;
架构比较清晰的就是,游戏对外服负责维护客户端的接入(用户、玩家的连接),游戏逻辑服专心负责业务逻辑,他们之间的调度由 Broker(游戏网关)来负责;因为架构拆分的合理,所以特别方便用 k8s 来自由伸缩部署这三种服,哪个服水位高就扩容哪个,水位过去了又可以缩容。
<hr/>快速入门代码示例
Proto 协议文件定义
首先我们自定义一个协议文件,这个协议文件作为我们的业务载体描述。这个协议是纯java代码编写的,使用的是 jprotobuf,jprotobuf 是对 google protobuf 的简化使用,性能同等。
可以把这理解成DTO、POJO、业务数据载体等,其主要目的是用于业务数据的传输;
/** 请求 */
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class HelloReq {
String name;
}
Action
游戏服务器的编程,游戏服务器接收业务数据后,对业务数据进行处理;
@ActionController(1)
public class DemoAction {
@ActionMethod(0)
public HelloReq here(HelloReq helloReq) {
HelloReq newHelloReq = new HelloReq();
newHelloReq.name = helloReq.name + &#34;, I&#39;m here &#34;;
return newHelloReq;
}
}一个方法在业务框架中表示一个 Action(既一个业务动作)。
方法声名的参数是用于接收前端传入的业务数据,在方法 return 时,数据就可以被游戏前端接收到。程序员可以不需要关心业务框架的内部细节。
从上面的示例可以看出,这和普通的 java 类并无区别,同时这种设计方式避免了类爆炸。如果只负责编写游戏业务,那么对于业务框架的学习可以到此为止了。
游戏编程就是如此简单!
问:我可以开始游戏服务器的编程了吗?
是的,你已经可以开始游戏服务器的编程了。
<hr/>访问示例(控制台)
当我们访问 here 方法时(通常由游戏前端来请求),控制台将会打印
┏━━━━━ Debug. [(DemoAction.java:4).here] ━━━
┣ userId : 888
┣ 参数: helloReq : HelloReq(name=塔姆)
┣ 响应: HelloReq(name=塔姆, I&#39;m here )
┣ 时间: 0 ms (业务方法总耗时)
┗━━━━━ Debug ━━━控制台打印说明
Debug. [(DemoAction.java:4).here] :
表示执行业务的是 DemoAction 类下的 here 方法,4 表示业务方法所在的代码行数。
在工具中点击控制台的 DemoAction.java:4 这条信息,就可以跳转到对应的代码中(快速导航到对应的代码),
这是一个开发良好体验的开始!
userId :
当前发起请求的 用户 id。
参数 :
通常是游戏前端传入的值。
响应:
通常是业务方法返回的值 ,业务框架会把这个返回值推送到游戏前端。
时间:
执行业务方法总耗时,我们可根据业务方法总耗时的时长来优化业务。
路由信息:
路由是唯一的访问地址。有了以上信息,游戏开发者可以很快的定位问题。如果没有可视化的信息,开发中会浪费很多时间在前后端的沟通上。问题包括:
[*]是否传参问题 (游戏前端说传了)
[*]是否响应问题(游戏后端说返回了)
[*]业务执行时长问题 (游戏前端说没收到响应, 游戏后端说早就响应了)
其中代码导航可以让开发者快速的跳转到业务类对应代码中,在多人合作的项目中,可以快速的知道业务经过了哪些方法的执行,使得我们可以快速的进行阅读或修改;
适合人群?
[*]长期从事 web 内部系统开发人员, 想了解游戏的
[*]刚从事游戏开发的
[*]未从事过游戏开发,但却对其感兴趣的
[*]对设计模式在实践中的应用和 sofa-bolt 有兴趣的学习者
[*]可以接受新鲜事物的
[*]想放弃祖传代码的
推荐实际编程经验一年以上的人员 关于零基础自学游戏开发这个话题在整个知乎也算是百家争鸣,几乎每位作者都有自己的看法和见解。Unity本身作为一个对新手非常友好的游戏开发引擎,确实是有非常多的途径可以学习并掌握它,但是对于游戏开发来说,学习方法和效率尤为重要。因此今天给大家推荐unity自学书单并且和大家交流交流学习方法,希望能够帮助到各位想要入行的同学们。
首先,不会c#真的不建议去碰unity3D任何书籍和课程,做游戏开发就像是写一篇文章或是一本书,如果你不懂最基本的语法、句法,怎么能下得去笔呢。所以想学unity3D那么一定要精通c#。这里我推荐大家好好阅读这本《C#图解教程》,同时切忌不要光纸上谈兵,同时最好可以跟一下网上的视频教程使用C#开发游戏脚本,遇到不会的点后再查阅书本去补充。一定按照这个方法打好C#的基础,这将对今后学习U3D意义非凡。
当我们熟练C#以后我们就可以进入U3D的学习了,这里给大家推荐:
《Unity3D从入门到精通》
这本书光看书名就是那种务实并且干货塞满的宝藏,它最大的优点就是从基础到进阶过度的非常丝滑,整本书知识板块的搭建也非常科学系统。非常适合入门同学阅读和学习。在我们熟练使用C#之后,这本《Unity3D从入门到精通》就得像圣经一样随时放在手边查阅,unity的哪个项目一旦卡壳遗忘了,立刻翻书回去补充。
《unity 3D手机游戏开发》
因为现在国内的话做手游的比较多,可能这块需求比较大一点,所以当你对《unity3d从入门到精通》这本书的内容有了一定理解掌握后,并且将来打算朝着手游开发方向发展,那么你一定不能错过这本书了。这本书几乎覆盖了所有关于手机游戏开发所需要的基础知识,并且还收录各种经典的案例供你学习。如果不是后面还有话要讲真想现在就甩个链接让你赶紧去看。
《Unity3D游戏开发》
这本书从书名就能够明白内容维度会更加广泛,主要是针对其他终端游戏开发的,各位根据自己的需求在第二本和第三本之间选择即可。
其实,这里还有非常多的书想要推荐给大家;但有一句话说的好,书不在多,在精。这个精可能是书的知识点设置精细,也是你对这本书是否精通。因此我不想一下给那么多可能干扰到大家的选择。毕竟各位的需求是零基础自学unity,我们只需要集中精力打好基础就行。
最后,游戏开发行业日新月异,我们不能仅仅局限于书本,因为现在纸类信息载体的流通速度完全没有办法和互联网信息流的载体相提并论。我们还需要尽可能的参加一些大厂的实习项目,或者跟网络上的大厂牛人一步步学习游戏开发。在实操中不断遇到问题,不断完善自身是的技能知识储备。
这里我推荐妙蛙老师的unity3D游戏开发训练营,每周都会有经典游戏开发的训练营比如近期的《空洞骑士》、《FPS射击游戏》等,主要包含一些实操干货、权威的行业解读、以及跳槽,转行、就业的相关指导。各位希望通过校招进入游戏大厂的准毕业生、或者希望获得工作晋升机会的同学和朋友一定不要错过。
推荐书本PDF: https://pan.baidu.com/s/1I08gvr6fpOwOPYutbDlgbA 提取码: strl(落地页)
没有项目经验,点击免费领取入营资格,大厂技术总监带你零基础开发出一款属于自己的游戏demo
点击卡片领取海量U3D学习资源
[*]可以学习一套固有教程,当然,更好的一种办法也是我比较建议的一种办法,就是从开发的套路入手,更加恰当的一种说法就是学习游戏开发企业中常用的开发经验、方式方法
[*]比如开发一款Unity游戏,没有进入企业工作过的新人会新建游戏对象然后往对象上面挂脚本,而如果你是一个专业开发者,那你就知道在企业中开发游戏时,游戏的数据、数值会由策划设定好,程序要通过读取这些游戏数值,根据这些数值来创建游戏对象,通过这些对象再进一步的挂上Unity中专门负责游戏渲染的游戏对象
[*]在开发网络游戏时,专业开发与业余开发的开发思维是不一样的,一个是按照官方的教程去做,另外一个是从数据驱动的角度进行游戏开发,整体思路都是不一样的,还有游戏的打包策略、游戏的性能优化、游戏的Shader开发、游戏的整体客户端框架、服务器框架、还有它的UI框架等等,这些都是在进行网络游戏开发时需要思考的一些方法
详细内容可以参考我们的《皇室战争S2:分布式与帧同步》公开课
页:
[1]