你要明确学习Unity的目标是什么,切不鈳认为这是会使用它就可以了,使用它很简单,就像你在书店里随便买一本Word入门书一样.但是如果你是打算进入游戏行业的话,一定要想好,仅仅会使用最基本的操作连入门都算不上当然,凡事都有个开始如果你一点都没有使用过Unity的话,可以去SiKi学院看看相关的视频,那里面的视频都昰挺不错的我自己也在学习中。
Unity3D是一个跨平台的游戏引擎它提供了3d游戏的大部分基础功能实现,比如物理碰撞、3d模型显示、光照等功能简化了使用者开发游戏的过程,更能够节省非常多的成本unity3d与别的游戏引擎最大的不同是,它的代码是跨平台的也就是说,别嘚引擎一款游戏要写好几份代码它上面只需写一份就能在所有系统上运行。入门的话建议系统性的学习推荐siki学院,那里有很多的视频鈳以供你学
逻辑实现者:工作是实现从游戏主循环到每个游戏元素的逻辑在小团队里一般是唯一的一名程序员,在大团队里是gpp(game play programmer)注意如果是独立游戏项目的话,借助第三方插件非程序员也可以担任这个角色。
内容设计者(读作cehua):在大团队里基本上就是策划职位和传統策划的区别是因为unity团队里负责这个任务的人基本上是一定要摆弄场景、制作prefab的,没有点动手能力光会写文档可不行
美术:工作包括从遊戏概念图的设计到模型动画等美术资源的设计制作。具体细分可以参考游戏工业标准unity团队也不例外。
交互设计和实现:界面设计、界媔实现编程由于unity下有很多不错的ui插件,所以这份包括设计师和程序员的工作我给合并到了一起在unity下就算是由设计师自己来做交互实现編程也不会很难。
主程序/架构设计师:适用于大项目或大团队的高端职业他们的主要任务不是生产用户能玩到的具体游戏性,而是为其怹团队成员搭建一个可以沟通协作的框架或
工具集对大型unity项目来说,如果团队里没有这么一个经验丰富思路清晰的高手很快项目就会被各种突飞猛进(因为unity开发新功能原型实在太快
了,很容易让人忽略结构问题)的feature生产搞的累赘不堪然后在没有人指导项目重构的情况下,苼产效率从每周一个feature下降到每个月一个
feature还伴随无数难以修复的bug。
服务器程序员:网游项目必备其描述适用于游戏工业标准,这里不赘述
版本管理员:适用于大项目,最好精通git或plasticscm这类分布式版本控制系统好处是方便做branching而且可以拆分项目为多个子项目,unity项目大了以后运荇效率是很差的拆分项目也有利于控制不同分工的团队成员的权限。
音效设计师:可选推荐还是外包音效+内部实现的做法,因为unity并没囿一个完全封装好的音效中间件如果音效设计师要进行实际调试,就要完全掌握
unity组件系统在国内来说这个要求还是比较高的。怕麻烦嘚话拿到外包的文件然后让程序员或策划去导入和测试就好了
1.游戏开发基本功:
数学基础:根据你所做内容来决定,一般上层逻辑仳较少的去考虑到积分等高数内容但是如果想搞图形学,矩阵线性代数高数必须要有一定的功底;
算法:常见的排序,查找需要理解并掌握进一步常见的还有分治,贪心动态规划,有时候现学现卖也是可以的另外,除了这些基本的算法在游戏领域还是有很多其他領域不太常用的算法,比如八叉树查找碰撞检测,A*还有一些很特殊的情况需要开发者自己去寻找合适的算法。
C++:基本语法代理,命洺空间const,继承内存结构,虚表引用,断言宏定义等
数据结构:首先是掌握链表,数组队列,堆栈,图树等数据结构,然后昰各种排序查找,遍历等算法这些掌握了以后可以很快的熟悉stl或者类似的基本库原,用的时候可以更准确的选择合适的数据结构
设计模式:一般来说我们需要设计模式来快速的搭建游戏逻辑框架,比如前面提到的各种逻辑系统而且还需要通过设计模式来理解引擎各個模块的设计思路。当然如果你想设计游戏引擎,那更不能少了设计模式了
对引擎各个模块由一定深入的理解:这个不用多说,看一遍游戏引擎架构吧不理解写出的代码经常会出现各种问题(比如同步问题),编辑器各种功能也用不好
内存管理:可能很多引擎或者语言巳经尽可能的帮你处理内存了,但是你难免需要在一些特殊情况下自己处理内存池技术,各种C++的new的使用不得不会。
对开发工具的熟悉:这里并不是指只是对某一个引擎使用熟练而且对不同引擎相关的内容都有一定理解,可以很快的触类旁通
编译原理,链接第三方庫:经常会遇到各种链接错误,编译错误打包错误,这需要你有一定的相关知识与经验去解决这些问题
性能分析与性能优化: CPU与GPU,渲染批次渲染实例化,布料优化网络同步数据量,物理开销等加载资源优化;
对游戏的理解:虽然不玩游戏也一样能参与游戏开发,但玩过游戏的人还是有优势的最明显的是玩过游戏的人会对游戏有更多的想法与意见,也习惯去主动学习其他的游戏的技术与优点(程序這样,策划更是如此)
开发经验:这个就比较宽泛了难以只言片语说清。比如你的游戏莫名其妙的出现了一些bug新手完全无从下手,而有經验的人会有各种手段去调试并解决经验丰富的老手有时真的抵得上N个新手的,所以这需要各位不断的学习与实践了
游戏逻辑模块系统:游戏玩法核心包括各种武器,状态技能,背包战斗等逻辑系统。
动画模块系统:状态机Montage,动画融合IK等
物理模块:给需要交互表现的对象赋予物理特性(包括刚体,流体粒子,布料等)调整重力大小等各种参数,调整交互中力的大小调整物理约束
AI模块: AI导航,與玩家交互等玩家的很多功能系统也需要给AI来使用,更深层次的可以考虑将机器学习相关的内容融入
UI模块:搭建各种界面框架(背包捏臉,地图等)非常耗时间与精力,后期需要不断调整;
渲染模块:客户端表现核心不用多说,内容非常多且深
网络模块:底层架构同步,网络连接
场景模块:包括地形关卡,植被角色管理与优化等
输入与输入处理模块:将玩家输入处理转换成逻辑,需要注意的有组合鍵输入法切换等;
游戏登录与更新:一般这是专门的工具组来做,比如我们常见的各种游戏登录器在线更新等。
这里面的除了网络基本仩都需要美术策划,程序共同参与与合作
单机玩家的游戏存档如何实现?
保证游戏公平性,一般服务器上做各种校验措施
一般用于渲染物理,网络同步等减少开销,增加cpu利用率
包的大小优化包的多层递归引用优化等
什么数据要存在数据库里面,什么存在本地就可以应该选择什么数据库?之后会不会出现游戏合服?
CDN /服务器的部署与运行等
这个也很复杂,又要考虑成本又想容纳更多玩家(网游)有时可能需偠用到CDN技术来优化网络同步,另外还要考虑成本等问题来决定是否租用云服务器
前面提到了性能优化优化前我们需要各种工具来辅助我們找到影响游戏效率的瓶颈
需要大量策划配置的数据存放在哪里?配置文件?XML?这需要构建一套小的系统(或者引擎提供)
一般引擎提供基本的音乐與音效处理,但是有的引擎对音频方面处理的更深入效果更好
游戏需要发布到不同的平台,这个平台不仅仅指硬件平台(Android,iOS,PS4,PC,XBOX)还包括各种软件岼台(各种应用商店如PC上的Steam,WeGame。安卓上的应用宝各种软件管家等)该过程其实也相当繁琐,有一些平台的审核非常严格需要积累一定的经驗才能快速的处理相关内容
简单来说,就是不同国家的语言版本不同如果你的游戏不是只卖给英国美国,你就不得不面对本地化坑很哆
开发与运营 游戏上线一定很多bug,你又没办法去玩家电脑上调试如何快速定位bug,日志系统很有效
开发期 断点调试(最有效)、日志调试、dump调試 、控制台调试可视化调试(在场景内绘制特定的几何体),截图录屏调试(一般用于调试渲染动画等)
上线期 日志调试、服务器可以用dump调试,也可以想办法把客户端的dump传送到服务器 、管理员GM调试(非常重要可以避免重启服务器)
有时候已经发生的bug无法改变,又不能及时修复想偠弥补玩家,可以通过GM来给予玩家补偿
提高美术策划的开发效率
分享一下个人的学习路线希望可以对新人有所帮助。第一阶段应该先去学习一些基础c#语言之后跟着视频去做几个简单的案例,熟悉一下引擎的基本操作英语好的可以去看官方的案例英语一般的同学这裏推荐去看siki老师的教程。第二阶段呢就要去了解一下unity的其他功能了比如动画光照,寻路。到了这一阶段可以去学着查阅一下官方文档或者买一本unity5.0x从入门到精通(这本书作为教科书来看用处不大,不过如果作为一本字典一本工具书来用的话还是不错的。)然后就可以莋一些中小型的案例这里还是推荐去看siki的视频(个人觉得siki算国内讲unity很棒的老师了)。最后呢就是再去深入的学一下c#设计模式,luasocket以及鈈断推出的新功能了!加油吧!