第01篇:优质工具,助您提升开发效率

第01篇:优质工具,助您提升开发效率

开发游戏产品,不论团队大小,我们肯定会与工具打交道,可能大家认为工具与优化也没啥关系,其实你错了,关系很大。下面就听我一一道来。

为什么需要工具?游戏产品开发是一个团队互相配合的项目,也有人会说,独立游戏开发者一个人所有的工作都做了,不是团队。你说的这个也没啥问题,但是同样独立开发者也需要工具。举个简单的例子,我们程序开发,肯定会需要代码管理工具 SVN 或者 Git,这二者是常用的,也不排除其他的,原理是一样的。工具的使用可以进行代码版本管理,最重要的是防止代码丢失,而且如果你自己把当前代码改错了,还可以回溯,找回以前的版本,否则,你就要自己浪费时间查找了。另外,现在很多人利用兼职开发独立游戏,有了项目管理工具,就可以远程协同开发了,同时可以进行产品版本管理等等,优点还是蛮多的,这里就不一一列举了。下面说说我们在项目开发时还需要哪些工具以及如何协同开发提升开发效率。

先说资源管理工具

程序开发无非分为美术、程序、策划。这三者都有自己的资源,美术有模型、图片、材质,程序有代码,策划有文案。在开发中为了提升彼此的效率,我们也使用了不同的版本管理工具。众说周知,Git 非常适合程序协同开发以及产品版本管理,这点 SVN 是无法比拟的,虽然 SVN 也可以做分支,但是每次更新它都会全部分支更新一遍,速度很慢的,影响效率。而 Git 恰恰避免了 SVN 的这些缺陷,它可以根据开发者建立自己的分支,还可以合并分支,每次更新可以只针对分支,速度很快,效率也很高,但是 Git 并不适合美术和策划,相比于 SVN 的操作,Git 使用更多的用命令行完成。当然市面上也有可视化操作跟 SVN 类似,因为美术和策划他们不需要提供分支和主干这样的操作,更不需要合并,所以策划和美术采用的版本管理工具是 SVN,比较方便,更有效率。对于程序使用 Git 的主干,我们程序开发把产品框架作为主干,每个模块的逻辑作为分支处理,这样参与逻辑开发的每个程序都可以起一个分支,逻辑写好了,测试完成,最后交给主程去合并,再测试。这样主程的重心是把控代码质量,通过图的方式给读者展示一下。

enter image description here

整个程序开发流程就完成了,在这里省略了测试,每个模块开发完成要做模块化测试保证你的逻辑功能是正确的,然后才能提交让主程合并分支。下面再介绍一下美术和策划需要的项目管理工具,在这里建议使用 SVN,操作简单,因为美术和策划不涉及到主干、分支这些,而且 SVN 属于可视化傻瓜式操作提交,更新删除都很容易。下面介绍如何将 Git 和 SVN 结合起来,我们的项目是一个整体,最终还是要整合在一起的。这里涉及一个模块化架构设计。就是要做到资源和代码的分离,脚本不要直接挂到美术资源上,而是通过代码动态的绑定。前期准备工作完成,接下来介绍项目开发了。

项目跟踪工具

为啥需要项目跟踪工具?策划会给美术和程序分配任务,这些任务如果是口头表达或者只是通过 Excel 表格给开发者,时间进度策划无法跟踪,而且这样开发效率也无法保证,久而久之,项目延期,问题 Bug 多多,各种扯皮的事情都会发生,最终产品上线计划无法保证,整个团队士气下降,最终曲终人散。所以要想项目成功必须要有项目跟踪工具,现在市面上有很多类似的工具,包括移动端都有,我们使用的是 PC 端比较经典的 Jira,使用哪款项目跟踪工具,其实都是可以的,我们必须要用项目跟踪工具,这样分配任务,时间节点,完成度,项目经理和策划以及项目组有权限的人都可以跟踪。如下面的流程图。

enter image description here

上图中的线比较多,正常流程是项目经理将项目任务提交到 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 插件,方便类文件的查找,定位函数位置非常便捷。安装完成后的效果图如下所示。

enter image description here

Vassistx 插件提供了非常多的功能,如下图菜单栏中的项所示。

enter image description here

另外,我们编写的代码也需要进行单元测试,一方面自己可以编写测试代码,另一方面编写单元测试用例时,使用的主要是 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);
    }
}

该例子是测试英雄受到伤害之后,血量是否和预期的相等,主要是便于策划调试数值使用。

测试框架会创建这个测试用例类,并且调用 TakeDamageBeAttackedHpEqual 方法来和其交互,最后使用 Nunit 的 Assert 类来断言是否通过测试。

NUnit 框架提供了一个 Assert 类来处理断言的相关功能,Asset 类用于声明某个特定的假设应该成立,因此如果传递给 Assert 类的参数和我们断言(预期)的值不同,则 NUnit 框架会认为测试没有通过。

强调一点,在做单元测试时,最好保持逻辑的简单,因此尽量避免使用下面的逻辑控制代码。

switch、if、foreach、for、while

一个单元测试应该是一系列的方法调用和断言,但是不应该包含控制流语句,下面给读者介绍一下如何使用。

先打开 Unity 编辑器,点击 Window 菜单栏,界面操作如下所示。

enter image description here

接下来的操作界面如下所示。

enter image description here

在该界面中有 Play Mode 和 Edit Mode,下面以 Edit Mode 为例给读者介绍使用。

enter image description here

产生的脚本是在 Editor 文件夹下面,我们只需要在其中加入测试代码即可,读者可以自行打开,跟我们上面的代码类似,下面看如何运行。

enter image description here

在框里点击右键会出现 run,再点击 run 即可运行,在下面的框中会打印出相应的 Log,如果出现绿色的对号表示测试成功,否则就是失败,Play Mode 模式使用跟这个类似,它是可以在运行的情况下测试,操作界面如下.

enter image description here

读者可以自己用其测试一下代码,蛮有意思的,下面代码没问题了,我们还要看看代码逻辑是否简练或者是否有冗余的代码。

代码检查

程序员大多都不善言语,这也导致了在一个项目组中彼此之间都不知道做啥。每个人都只管做好自己的事情,这也主要是绩效惹的祸,这样做的后果就是一旦某个模块出现问题,修改起来非常麻烦,因为彼此并不熟悉对方写的模块。这种问题怎么解决呢?我们可以利用晨会进行相互之间的沟通,这样就会清楚对方做什么,也可以搞清楚彼此之间有没有需要对接的点等等,这是必须要做的。另一方面,作为程序员晚上经常加班,其实效率是很低的,不如利用这段时间,团队成员之间就今天做的内容相互之间审核一下,这样既能找出对方问题,又能熟悉别人做的内容,一旦出现团队成员离开,会有人能顺利的接手,不至于耽误项目。而且,主程也可以召集大家就存在的问题举行一个小型会议,讨论纠正在编写过程中存在的问题,这样可以有助于学习别人的长处弥补自己的短处。有的同学可能会说这个比较麻烦,而且如果主程不牵头,很难实行,其实 Unity 也为我们提供了代码缺陷检测工具,可以访问这个网址查看。

不过这个插件是依附于 Mono 的,需要用 Mono 编辑器编程。不过用户不用担心,Visual Studio 也提供了这方面的工具 StyleCode,访问这个网址下载。

敏捷开发

敏捷开发虽然很多人对其并不看好,但是我还是比较认同,因为它能帮我们提升开发效率。我们利用敏捷思维以及上述工具开发一款 2D 游戏,团队规模7个人,包括美术、策划和程序。开发四个月时间上线,程序规模类似《荒野求生》。从开发到上线这么短的时间就可以搞定一款游戏,其实最重要的是我们利用了敏捷开发思维和高效的工具去做事情,那么我们是如何执行的呢?

首先制定计划,当然这个计划是细化到周的。每周再详细到每天,以天作为单位,我们会把一周的工作任务按照天分解到各个人,然后把它们写在便签上,贴在黑板上。如果完成了就撕掉,当然完成的前提是被策划验收通过,每天早晨会开一个小范围的晨会,每个人通报一下昨天做了那些事情,今天做什么事情,有没有遇到什么问题。遇到的问题如果棘手的,在会后更小范围讨论直至解决,如果实在搞不定,可以放弃或者让策划想办法换种想法,千万记住不能因为小的困难阻碍项目顺利进展。

总结

大家在项目研发时,一定要做到主次分明,目标明确。因为游戏开发经常遇到的事情就是,你在做事情的过程中,忽然你的项目经理过来,让你随机加个功能或者配合他调试某个数据,这样就打乱你自己的节奏。等帮项目经理把事情做完,你再回来估计一时半会拾不起来,降低了效率,以后遇到这种情况敢于说不。最后,再给读者提醒一下,好工具的选择是必须的,其实这些工具对开发者来说也是一些规范,我们只有遵守这些规范才能做好项目,从而避免项目后期出现的各种问题,有的问题甚至会对项目造成致命的危害,习主席说的好:“守规矩,打胜仗”同样的道理。

上一篇
下一篇
目录