内容简介:课程简介Unity 在移动端的优化问题一直困扰着开发者,世上没有万能的解决优化方法,只有具体问题具体分析,找到问题才是唯一出路。本达人课是关于优化的系列课程,目标是教会读者如何找到问题的根源,解决问题。影响效率的问题非常多,包括架构设计、编码习惯、硬件等等。本教程针对的是游戏开发最棘手的问题:不同机型的适配、运行效率等。效率的优化关系到项目的生死,千里之堤毁于蚁穴。优化自始至终贯穿于项目开发之中,切记不能等到项目开发结束时才去优化,亡羊补牢的做法不提倡,因为一旦遇到框架问题,项目将面临灾难性后果。
课程简介
Unity 在移动端的优化问题一直困扰着开发者,世上没有万能的解决优化方法,只有具体问题具体分析,找到问题才是唯一出路。本达人课是关于优化的系列课程,目标是教会读者如何找到问题的根源,解决问题。影响效率的问题非常多,包括架构设计、编码习惯、硬件等等。
本教程针对的是游戏开发最棘手的问题:不同机型的适配、运行效率等。效率的优化关系到项目的生死,千里之堤毁于蚁穴。优化自始至终贯穿于项目开发之中,切记不能等到项目开发结束时才去优化,亡羊补牢的做法不提倡,因为一旦遇到框架问题,项目将面临灾难性后果。
本课程主要包括 6 篇文章,内容主要涉及项目开发效率提升、资源优化、Shader 合理使用、代码优化、算法运用等技术点,均从项目开发根源着手,通过技术实战案例,层层深入讲解,助您解决项目中遇到的关于优化方面的棘手问题、提供解决问题的方案。
作者介绍
姜雪伟,从事 IT 行业15年,现担任创业公司技术合伙人。著有《手把手教你架构 3D 游戏引擎》、《Unity 3D 实战核心技术详解》、《Cocos2d-x 3.x 图形学渲染技术讲解》等图书,担任 CSDN、泰课等多家在线教育讲师,参与或主导过十多款网络游戏研发。
课程内容
导读:Unity3D 游戏产品优化技术综述
序言
游戏产品在研发过程中都会涉及到产品优化。这是产品迈不过去的坎,因为游戏产品需要适配不同的设备,而设备从硬件到软件彼此差别比较大,这也导致了游戏产品在不同的设备就会有不同的表现,有的设备运行顺畅,有的就出现卡顿,或者出现画面渲染问题等,而我们就是要找到这些问题根源,从而解决它们。
关于优化 Unity 游戏产品,这个题目所蕴含的内容很多,我们开发一款产品,需要一整套流程才能保证产品顺利出来,本达人课主要分为开发 工具 的运用、资源优化、代码优化、Shader 的使用、算法运用等几大部分。站在开发者的角度去思考解决问题,先从产品的每个细节入手,如果处理不好,一时不会影响效率,但积少成多就会影响到游戏效率的运行。目前市面上大部分游戏产品的开发都是基于 Unity 引擎开发的,遇到需要优化最多的问题是各种机型的适配,这个适配不是简单的 UI 适配,而是运行效率适配,尤其适配不同厂家的 Android 系统的机型,由于他们使用的芯片不同,系统不同,也决定了要使用不同的解决方案做适配,在做适配之前先给读者看看2017年官方发布的手机使用的芯片分布表,见下图。
这些芯片是目前市场使用最多的芯片,我们不是搞硬件的,它们的内部原理对我们来说是黑盒子,但是它们为我们解决手机适配提供依据,我们可以根据手机使用的硬件对它们进行分类,这样有助于我们定位问题。
在解决手机问题上,大部分开发者会认为,无非是资源、代码、Shader 编程。作为 程序员 来说,更愿意把这些问题推给美术资源,通常的做法就是让美术模型减面,减少使用的美术材质,同时对图片进行压缩,在游戏中对动态网格进行合并,对静态网格做 Static 处理,减少摄像机裁剪距离等等,但是这样的处理方式一是降低了游戏品质,二是根本没有实质性的解决问题,这也是项目开发中遇到卡顿、卡帧问题的主要原因。虽然开发者解决了一部分机型适配,另一部分机型还是有问题,最终适配还是有问题。其实归根结底是没有从根上解决问题,在这里给读者解释一个误区,优化产品并不是说,在项目开始阶段程序逻辑就可以随便乱写,模型面数没有限制,优化并不是在项目结尾时再进行的,它是一直贯穿于项目从开始到结束。而且我们优化产品,要养成好的开发习惯,这个习惯并不单单指的是编码,从开发产品工具的使用到产品的管理测试,这一整套作为开发者都需要掌握的。那如何才能做到呢?我们主要从以下几个步骤讲起,只要我们贯彻好了,项目优化就好做多了。
开发工具的运用
我们开发游戏产品都是团队作业,美术、程序、策划都需要项目管理工具,美术提交资源,策划提交文案,程序提交代码。我们主要使用的项目管理工具有 SVN、Github,二者选择其一,或者结合使用,以我们项目组的开发为例,以前我们使用 SVN 作为项目管理工具。在项目初期使用时,没有问题,但是到了后期,项目要分版本开发,大家知道项目上线后,要接不同渠道的 SDK,最多时接了50个左右,刚开始也使用了 SVN 的 Branch 分支,但是每次更新速度都很慢,而且也不利于多人开发,被折磨了一段时间后,我们将其换成了 Github,感觉轻松多了。当然美术和策划还是使用 SVN,相对来说,Github 操作比 SVN 复杂一些,而美术和策划也不需要像程序一样搞几十个版本。另外,我们项目对资源和代码逻辑做了分离,逻辑代码都是动态的绑定到资源对象上,这是因为资源经常变动,经常修改,如果上面挂脚本,一旦出现漏挂,会出现一些问题,还需要人去查找这样的问题,浪费时间,所以最好不要直接绑定逻辑脚本。
上面介绍了项目管理工具,再说说项目跟踪工具,策划、美术、程序在项目开发协作方面也需要配合,比如策划给美术和程序下达任务以及完成时间节点。作为策划,他要清楚美术和程序的进展情况,如果我们只是靠口头去传达,容易出现扯皮的事情发生,而且时间和质量不好把控,延误肯定会发生的。这就需要用到项目跟踪工具,我们的项目开发工具使用的是 JIRA 或者禅道等等,策划会将任务传到 JIRA,主程分配任务,程序领任务,策划可以定期在上面查看各个任务进度,及时发现任务是否有延期的隐患,及时纠正。
项目跟踪也有了,项目顺利进行了,接下来,就是测试了。众所周知,使用 Unity 打包,如果工程很大,每次编译都需要耗费一些时间,而且策划或者测试会不定期的让程序打个包给他看看,这样容易打断程序员开发思路。另外,项目在每个节点也需要发包测试。总之,打包的次数非常多,如果不将其工具化,程序员的时间都将浪费在这上面,每次打包资源整合都会耗费程序员的大量时间。鉴于手动打包总总不利因素,自动打包工具应运而生,我们可以使用一个自动打包工具 Jenkins,它可以采用 Shell 脚本编程,自动更新 SVN 或者 Git 服务器的内容,打包人员只需要点一下按钮,服务器就可以生成当前最新的包,傻瓜式操作,将其下载下来安装测试,非常方便。这样,打包的事情策划和美术都可以操作,彻底解放了程序。
最后,我们在项目开发时,会根据策划需求自己写一些依附于 Unity 编辑器的工具,这个也是必须的,比如资源打包、文本文件处理、资源检查、包体大小检测、单元测试等等。作为程序开发者,工具当然是越多越好,如果一款游戏只需要操作工具就可以生成,程序员只需要专心维护工具,而策划只需要专心使用工具,美术制作模型,一款产品很快就可以研发出来,类似汽车生产的流水线作业。
游戏中资源优化
游戏资源的优化,这个是老生常谈的问题了,无非是从资源面数、材质数量、骨骼动画数量、特效粒子数、图片的压缩、网格合并等等入手,网上这方面的介绍比较多。以上这些操作可以帮助我们解决部分问题,但是除了这些还会有其他的问题。这里举个例子,如果我们场景中有很多草呢?或者说有很多透贴的树木呢?场景中很多怪物,类似国战这样类型的游戏,双方都需要很多 NPC 开战等等。这些 NPC 是不可以用网格合并的,因为它们是单个的个体,有自己的属性,是可以被击杀的。另外透贴的树木也是非常耗时的,其实这种问题也是可以解决的,利用 GPU 编程实现,具体如何解决会在后面的章节介绍。
另外资源需要将其打包成 Assetbundle,一部分资源会上传到服务器上,进行资源的更新,这就要涉及到 AssetBundle 包体的数量、包体的大小、打包的依赖、内存的管理等等,作为开发者都需要认真考虑的。详情请查看下一篇“资源优化,教你合理调配游戏资源”这一课程。
合理运用 Shader
Shader 渲染提升了游戏的品质,但是如果过渡使用同样会引起帧数的降低、卡帧情况的发生。举个简单的例子,游戏中的模型会涉及到双面显示的,开发者一般的做法是在 Shader 中加一条语句 Cull off 就可以开启双面显示。但是对于 GPU 来说就是一种消耗,如果在游戏中使用过多,会引起帧数下降,其实能美术解决的问题就不要用程序解决,这只需要美术再做一个面就可以实现,而不是使用 Shader 去处理,还有在场景中大量使用透贴,也是一种消耗。比如下面游戏使用的草和树木,如果处理不当就会在手机端出现卡顿情况,如下图所示。
另外,在使用 Unity 自带的 Shader 或者使用网上提供的 Shader,复杂的处理会涉及一些函数的使用,比如exp、log等,如果使用过多也会影响执行效率,解决办法是将它们适当地替换掉。如果你的产品面向的是高端机型,效率没啥影响可以直接忽略。还有 Shader 中变量的声明,从精度来说,float、half、fixed 依次降低,但是它们的效率也是依次升高,如果游戏品质在可接受的情况下,可以适当的使用精度低的变量类型,这样游戏运行效率会得到保证,同样 float2、half2、fixed2、float3、half3、 fixed3、float4、half4、fixed4 跟前面的类似。做 AR 产品时,就是通过降低变量精度实现适配的,同时品质在可接受范围内。我们在项目开发中还用了实时阴影、残影、角色的透明处理等等,都是使用 Shader 编程实现的。
代码优化
一提起手机效率优化,诸位是不是都感觉都头疼,有时找了半天都无处下手,或者是根本不知道哪里出的问题,在此我们先分析一下 Unity 的内存管理。
先从代码编程说起,编码的细节问题也是面试时经常遇到的,这里也给读者举几个编码的例子,比如 string 字符串链接——“+”号链接,但是使用“+”号会产生副本,占用内存,而如果使用 StringBulider 中的 append 可以避免副本的产生;还有单例类和静态类的区别,有时程序员为了调用函数方便,代码中会涉及到很多静态类,静态类是常驻内存的,过多的使用也会占内存的,程序中不易多用;另外还有结构体与类的区别,值类型和引用类型等等。虽然这些都是一些细节问题或者说小问题,但是作为程序开发者,都必须要掌握的。另外,很多程序喜欢使用插件解决问题,插件是可以帮助解决问题但是也带来了隐患,举个例子,行为树 BehaveTree 插件,因为它内部为我们封装好了,我们只需要用它提供的可视化界面拖拖拽拽就可以完成行为的转换,如下图所示。
在游戏中使用过多的行为树,因为在运行时它要不停的进行状态切换,同样在手机端会出现卡顿情况,解决方案其实比较简单,简化行为树逻辑,同时使用 FSM 或者 Switch 语句代替,我在做赛车游戏时遇到行为树导致卡顿的问题,就是使用上述方式解决的。
关于代码优化,就不得不提架构设计,这个是一直重点强调的问题,先给读者介绍常用的架构设计——ECS 架构,详情可以访问这个 网址 。
另外比较重要的架构设计是 MVC 和 FSM 结合着 State 状态 设计模式 使用,例如,UI 的设计,角色动作状态切换等;Observer 观察者模式在游戏中也经常使用,比如足球类游戏。
之前撰写的 《Unity 3D 网络游戏架构设计》达人课 中给读者介绍了网络架构设计模式就是按照这个设计的,有兴趣的读者可以看看。
最后再介绍一个经常使用的架构设计是委托,委托方式很容易将代码模块化,这对开发者也是一种架构选择。
算法运用
在游戏开发中,核心玩法很多都是基于算法实现的,作为程序员要学会学以致用,将书本知识用到产品开发中。很多人喜欢抱怨大学课本中学到的知识,没有任何用处,其实在游戏开发中,经常使用的算法,包括我们大学时学习的数据结构。作为程序员必备的技能,产品开发中,我们经常会用到队列、栈这些算法。我们要使用算法,就必须了解这些数据结构的特性,比如队列是先进先出,栈是后进先出。
另外用得比较复杂的算法,使用最多的是 A 算法和 AI 算法。作为大部头的 MMO 产品,A 算法是必须要掌握的,它不同于 Unity 自带的 NavMesh 算法。NavMesh 算法对 3D 场景应用的非常好,但是对 2D 游戏并不能完全满足需求,我们的游戏服务器也需要 A*算法的支持,这样才可以做到服务器与客户端之间的同步,插值运算比如常用的抛物线插值,角色同步时的线性插值,刀光拖尾的 Bezier 曲线插值或者 B 样条曲线插值等。同样,我们还需要重点掌握一些知识,这些知识帮助我们解决了很多问题——向量计算和矩阵计算。关于向量计算,举个例子,我们在使用导弹攻击目标时,导弹要一直跟踪目标,这就要求导弹的头一直对准物体,这会涉及到向量的点乘和叉乘运算。矩阵转换,同样也很重要,矩阵运算除了在固定流水线和可编程流水线应用外,我们还会用它做一些颜色格式的转换,比如摄像机获取到的视频数据格式是 YUV,我们要将其转化成 RGB 在 Unity 中显示出来。给读者看一下转换的代码。
varying vec2 v_texCoord;uniform sampler2D yTexture; uniform sampler2D uvTexture;**const mat3 yuv2rgb = mat3( 1, 0, 1.2802, 1, -0.214821, -0.380589, 1, 2.127982, 0 );**void main() { vec3 yuv = vec3( 1.1643 * (texture2D(yTexture, v_texCoord).r - 0.0627), texture2D(uvTexture, v_texCoord).a - 0.5, texture2D(uvTexture, v_texCoord).r - 0.5 ); vec3 rgb = yuv * yuv2rgb; gl_FragColor = vec4(rgb, 1.0);}
总结
授人以鱼不如授人以渔,关于优化的详细介绍,会在后面章节中介绍。本教程先从工具的使用讲起,逐步深入。
第01篇:优质工具,助您提升开发效率
开发游戏产品,不论团队大小,我们肯定会与工具打交道,可能大家认为工具与优化也没啥关系,其实你错了,关系很大。下面就听我一一道来。
为什么需要工具?游戏产品开发是一个团队互相配合的项目,也有人会说,独立游戏开发者一个人所有的工作都做了,不是团队。你说的这个也没啥问题,但是同样独立开发者也需要工具。举个简单的例子,我们程序开发,肯定会需要代码管理工具 SVN 或者 Git,这二者是常用的,也不排除其他的,原理是一样的。工具的使用可以进行代码版本管理,最重要的是防止代码丢失,而且如果你自己把当前代码改错了,还可以回溯,找回以前的版本,否则,你就要自己浪费时间查找了。另外,现在很多人利用兼职开发独立游戏,有了项目管理工具,就可以远程协同开发了,同时可以进行产品版本管理等等,优点还是蛮多的,这里就不一一列举了。下面说说我们在项目开发时还需要哪些工具以及如何协同开发提升开发效率。
先说资源管理工具
程序开发无非分为美术、程序、策划。这三者都有自己的资源,美术有模型、图片、材质,程序有代码,策划有文案。在开发中为了提升彼此的效率,我们也使用了不同的版本管理工具。众说周知,Git 非常适合程序协同开发以及产品版本管理,这点 SVN 是无法比拟的,虽然 SVN 也可以做分支,但是每次更新它都会全部分支更新一遍,速度很慢的,影响效率。而 Git 恰恰避免了 SVN 的这些缺陷,它可以根据开发者建立自己的分支,还可以合并分支,每次更新可以只针对分支,速度很快,效率也很高,但是 Git 并不适合美术和策划,相比于 SVN 的操作,Git 使用更多的用命令行完成。当然市面上也有可视化操作跟 SVN 类似,因为美术和策划他们不需要提供分支和主干这样的操作,更不需要合并,所以策划和美术采用的版本管理工具是 SVN,比较方便,更有效率。对于程序使用 Git 的主干,我们程序开发把产品框架作为主干,每个模块的逻辑作为分支处理,这样参与逻辑开发的每个程序都可以起一个分支,逻辑写好了,测试完成,最后交给主程去合并,再测试。这样主程的重心是把控代码质量,通过图的方式给读者展示一下。
整个程序开发流程就完成了,在这里省略了测试,每个模块开发完成要做模块化测试保证你的逻辑功能是正确的,然后才能提交让主程合并分支。下面再介绍一下美术和策划需要的项目管理工具,在这里建议使用 SVN,操作简单,因为美术和策划不涉及到主干、分支这些,而且 SVN 属于可视化傻瓜式操作提交,更新删除都很容易。下面介绍如何将 Git 和 SVN 结合起来,我们的项目是一个整体,最终还是要整合在一起的。这里涉及一个模块化架构设计。就是要做到资源和代码的分离,脚本不要直接挂到美术资源上,而是通过代码动态的绑定。前期准备工作完成,接下来介绍项目开发了。
项目跟踪工具
为啥需要项目跟踪工具?策划会给美术和程序分配任务,这些任务如果是口头表达或者只是通过 Excel 表格给开发者,时间进度策划无法跟踪,而且这样开发效率也无法保证,久而久之,项目延期,问题 Bug 多多,各种扯皮的事情都会发生,最终产品上线计划无法保证,整个团队士气下降,最终曲终人散。所以要想项目成功必须要有项目跟踪工具,现在市面上有很多类似的工具,包括移动端都有,我们使用的是 PC 端比较经典的 Jira,使用哪款项目跟踪工具,其实都是可以的,我们必须要用项目跟踪工具,这样分配任务,时间节点,完成度,项目经理和策划以及项目组有权限的人都可以跟踪。如下面的流程图。
上图中的线比较多,正常流程是项目经理将项目任务提交到 Jira 项目跟踪工具中,以程序任务为例,先将其指向给主程,由主程分解任务,安排任务给相关的程序员,程序员接到任务,更新任务状态,时间安排。接下来开始处理该任务,完成后提交项目工程给测试人员,测试人员根据需求测试。如果有问题,它再指向该程序员,并且把 BUG 描述清楚,否则如果测试没有问题,指向项目经理,关闭任务,任务结掉。大家看着复杂,其实执行起来就是一条流水线,这样做的好处可以避免无谓的争吵。项目管理工具有了,跟踪工具也有了,还缺少打包工具。
程序打包工具
使用 Unity 开发程序,通常的打包方式就是使用 Unity 编辑器进行 Build,如果工程比较大的情况下,Build 时间比较长。浪费开发者的时间,如果一天打这么几次,想想就头疼了。如何对这块进行改进呢?我们推荐使用 Jenkins 自动打包工具,需要开发者配置一下,它使用 SVN 或者 Git 都可以。编写几行 Shell 脚本就可以设置好,当然事先要在配置 Jenkins 服务器上安装 Unity 程序,它其实就是使用命令行的方式打开 Unity 去 Build,只是通过点击 Jenkins 页面的按钮就可以实现,它会自动更新 Git 或者 SVN 上的代码。项目组的成员什么时候打包都可以。安装部署以及使用,这里有篇博客 《Unity3D Jenkins 打包 Android》 推荐阅读。
除了 Jenkins 打包工具外,我们还需要有 Assetbundle 打包工具,这个网上代码很多的,检查资源材质是否丢失工具,删除不用的材质工具;在程序运行时可以查看内存占用情况,虽然 Unity 编辑器已经为我们提供了 Profiler,我们自己还是要有自己的内存查看。
编码工具
在编写代码时,我最喜欢的编码工具还是 Visual Studio,为了跟 Unity 结合起来,安装一个 Visual Studio Tools for Unity 插件,这样就可以使用 Visual Studio 联调 Unity 工程了,该插件有对应的 Visual Studio 对应的版本。编写代码还需要装一个 Vassistx 插件,方便类文件的查找,定位函数位置非常便捷。安装完成后的效果图如下所示。
Vassistx 插件提供了非常多的功能,如下图菜单栏中的项所示。
另外,我们编写的代码也需要进行单元测试,一方面自己可以编写测试代码,另一方面编写单元测试用例时,使用的主要是 Unity Editor 自带的单元测试模块,Unity 的单元测试是基于 NUnit 框架的,该 NUnit 是免费的框架,下面介绍如何使用它。
在编写 Unity3D 项目的单元测试时,首先要引入 NUnit.Framework 命名空间,且单元测试类要加上 [TestFixture]
属性,单元测试方法要加上 [Test]
属性,并将测试用例的文件放在 Editor 文件夹下。举个测试代码例子如下。
using UnityEngine;using System.Collections;using NUnit.Framework;[TestFixture]public class HpCompTests{ //测试被攻击之后伤害数值是否和预期值相等 [Test] public void TakeDamage_BeAttacked_HpEqual(){ //Arrange HpComp health = new HpComp(); health.currentHp = 100; //Act health.TakeDamage(50); //Assert Assert.AreEqual(50f, health.currentHp); }}
该例子是测试英雄受到伤害之后,血量是否和预期的相等,主要是便于策划调试数值使用。
测试框架会创建这个测试用例类,并且调用 TakeDamage BeAttacked HpEqual 方法来和其交互,最后使用 Nunit 的 Assert 类来断言是否通过测试。
NUnit 框架提供了一个 Assert 类来处理断言的相关功能,Asset 类用于声明某个特定的假设应该成立,因此如果传递给 Assert 类的参数和我们断言(预期)的值不同,则 NUnit 框架会认为测试没有通过。
强调一点,在做单元测试时,最好保持逻辑的简单,因此尽量避免使用下面的逻辑控制代码。
switch、if、foreach、for、while
一个单元测试应该是一系列的方法调用和断言,但是不应该包含控制流语句,下面给读者介绍一下如何使用。
先打开 Unity 编辑器,点击 Window 菜单栏,界面操作如下所示。
接下来的操作界面如下所示。
在该界面中有 Play Mode 和 Edit Mode,下面以 Edit Mode 为例给读者介绍使用。
产生的脚本是在 Editor 文件夹下面,我们只需要在其中加入测试代码即可,读者可以自行打开,跟我们上面的代码类似,下面看如何运行。
在框里点击右键会出现 run,再点击 run 即可运行,在下面的框中会打印出相应的 Log,如果出现绿色的对号表示测试成功,否则就是失败,Play Mode 模式使用跟这个类似,它是可以在运行的情况下测试,操作界面如下.
读者可以自己用其测试一下代码,蛮有意思的,下面代码没问题了,我们还要看看代码逻辑是否简练或者是否有冗余的代码。
代码检查
程序员大多都不善言语,这也导致了在一个项目组中彼此之间都不知道做啥。每个人都只管做好自己的事情,这也主要是绩效惹的祸,这样做的后果就是一旦某个模块出现问题,修改起来非常麻烦,因为彼此并不熟悉对方写的模块。这种问题怎么解决呢?我们可以利用晨会进行相互之间的沟通,这样就会清楚对方做什么,也可以搞清楚彼此之间有没有需要对接的点等等,这是必须要做的。另一方面,作为程序员晚上经常加班,其实效率是很低的,不如利用这段时间,团队成员之间就今天做的内容相互之间审核一下,这样既能找出对方问题,又能熟悉别人做的内容,一旦出现团队成员离开,会有人能顺利的接手,不至于耽误项目。而且,主程也可以召集大家就存在的问题举行一个小型会议,讨论纠正在编写过程中存在的问题,这样可以有助于学习别人的长处弥补自己的短处。有的同学可能会说这个比较麻烦,而且如果主程不牵头,很难实行,其实 Unity 也为我们提供了代码缺陷检测工具,可以访问这个 网址 查看。
不过这个插件是依附于 Mono 的,需要用 Mono 编辑器编程。不过用户不用担心,Visual Studio 也提供了这方面的工具 StyleCode,访问这个 网址 下载。
敏捷开发
敏捷开发虽然很多人对其并不看好,但是我还是比较认同,因为它能帮我们提升开发效率。我们利用敏捷思维以及上述工具开发一款 2D 游戏,团队规模7个人,包括美术、策划和程序。开发四个月时间上线,程序规模类似《荒野求生》。从开发到上线这么短的时间就可以搞定一款游戏,其实最重要的是我们利用了敏捷开发思维和高效的工具去做事情,那么我们是如何执行的呢?
首先制定计划,当然这个计划是细化到周的。每周再详细到每天,以天作为单位,我们会把一周的工作任务按照天分解到各个人,然后把它们写在便签上,贴在黑板上。如果完成了就撕掉,当然完成的前提是被策划验收通过,每天早晨会开一个小范围的晨会,每个人通报一下昨天做了那些事情,今天做什么事情,有没有遇到什么问题。遇到的问题如果棘手的,在会后更小范围讨论直至解决,如果实在搞不定,可以放弃或者让策划想办法换种想法,千万记住不能因为小的困难阻碍项目顺利进展。
总结
大家在项目研发时,一定要做到主次分明,目标明确。因为游戏开发经常遇到的事情就是,你在做事情的过程中,忽然你的项目经理过来,让你随机加个功能或者配合他调试某个数据,这样就打乱你自己的节奏。等帮项目经理把事情做完,你再回来估计一时半会拾不起来,降低了效率,以后遇到这种情况敢于说不。最后,再给读者提醒一下,好工具的选择是必须的,其实这些工具对开发者来说也是一些规范,我们只有遵守这些规范才能做好项目,从而避免项目后期出现的各种问题,有的问题甚至会对项目造成致命的危害,习主席说的好:“守规矩,打胜仗”同样的道理。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 大话产品:小公司产品别自卑,大公司产品别自负
- 产品小白进行产品验收,从这些方面入手
- 产品经理核心技能修炼:如何做好产品需求管理?
- 产品数据体系建设基础:一个产品的数据体系建设
- 产品经理 VS.产品负责人(Product Owner)
- 产品经理 VS.产品负责人(Product Owner)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Unreal Engine 4 Scripting with C++ Cookbook
Sherif, William、Stephen Whittle / 2016-10-24
Unreal Engine 4 (UE4) is a complete suite of game development tools made by game developers, for game developers. With more than 100 practical recipes, this book is a guide showcasing techniques to us......一起来看看 《Unreal Engine 4 Scripting with C++ Cookbook》 这本书的介绍吧!