【文本】

38、假设你有非常多的剧情文本。那么把他们放到一个文件中面。

不要把他们放到Inspector的字段中去编辑。

这些须要做到不打开Unity,也不用保存Scene就能够方便的改动。

39、假设你计划实现本地化。那么把你的字符串分离到一个统一的位置。

有非常多种方法来实现这点。比如。定义一个文本Class。为每一个字符串定义一个public的字符串字段,并把他们的默认值设为英文。

其它的语言定义为子类,然后又一次初始化这些字段为对应的语言的值。

第二种更好的技术(适用于文本非常大或者支持的语言数量众多),能够读取几个单独的表单,然后提供一些逻辑,依据所选择的语言来选取正确的字符串。





                                                                                                                                                                       

【測试与调试】

40、实现一个图形化的Log用来调试物理、动画和AI。

这能够显著的加速调试工作。

详见这里。

41、实现一个HTML的Log。

在非常多情况下。日志是非常实用的。拥有一个便于分析的Log(颜色编码、有多个视图、记录屏幕截图等)能够使基于Log的调试变动愉悦。详见这里。

42、实现一个你自己的帧速率计算器。

没有人知道Unity的FPS计算器在做什么。可是肯定不是计算帧速率。实现一个你自己的。让数字符合直觉并可视化。

43、实现一个截屏的快捷键。

非常多BUG是图形化的,假设你有一个截图,就非常easy报告它。一个理想的系统,应该在PlayerPrefes中保存一个计数,并依据这个计数。使得全部成功保存的截屏文件都不被覆盖掉。截屏文件应该保存在project目录之外,这能够防止人们不小心把它提交到版本号库中。

44、实现一个打印玩家坐标的快捷键。

这能够在汇报位置相关的BUG时明白它发生在世界中的什么位置,这能够让Debugeasy一些。

45、实现一些Debug选项,用来方便測试。

一些样例:

  • 解锁全部道具;
  • 关闭全部敌人;
  • 关闭GUI;
  • 让玩家无敌;
  • 关闭全部游戏逻辑;

46、为每个足够小的团队,创建一个适合他们的Debug选项的Prefab。

设置一个用户标识文件,单不要提交到版本号库,在游戏执行时读取它。以下是原因:

  • 团队的成员不会由于意外的提交了自己的Debug设置而影响到其它人。
  • 改动Debug设置不须要改动场景。

47、维护一个包括全部游戏元素的场景。

比如。一个场景,包含全部的敌人,全部能够交互的对象等等。这样能够不用玩非常久,而进行全面的功能測试。

48、定义一些Debug快捷键常量。并把他们保存在统一的地方。

Debug键通常(方便起见)在一个地方来处理,就像其它的游戏输入一样。为了避免快捷键冲突,在一个中心位置定义全部常量。

一种替代方案是。在一个地方处理全部按键输入,无论他是否是Debug键。

(负面作用是,这个类可能须要引用很多其它的其它对象)





【文档】

49、为你的设置建立文档。

代码应该拥有最多的文档,可是一些代码之外的东西也必须建立文档。让设计师们通过代码去看假设进行设置是浪费时间。把设置写入文档。可以提高效率(假设文档的版本号可以及时更新的话)。

用文档记录以下这些:

  • Layer的使用(碰撞、检測、射线检測——本质上说。什么东西应该在哪个Layer里);
  • Tag的使用;
  • GUI的depth层级(说什么应该显示在什么之上);
  • 惯用的处理方式;
  • Prefab结构;
  • 动画Layer。

【命名规则和文件夹结构】

50、遵从一个命名规范和文件夹结构。并建立文档

命名和文件夹结构的一致性,能够方便查找。并明白指出什么东西在哪里。

你非常有可能须要创建自己的命名规则和文件夹结构。以下的样例仅供參考。

普遍的命名规则

  • 名字应该代表它是什么。比如鸟就应该叫做Bird。
  • 选择能够发音、方便记忆的名字。假设你在制作一个玛雅文化相关的游戏。不要把关卡命名为QuetzalcoatisReturn。
  • 保持唯一性。假设你选择了一个名字。就坚持用它。

  • 使用Pascal风格的大写和小写。比如ComplicatedVerySpecificObject。

    不要使用空格。下划线。或者连字符,除了一个例外(详见为同一事物的不同方面命名一节)。
  • 不要使用版本号数字,或者标示他们进度的名词(WIP、final)。
  • 不要使用缩写:DVamp@W应该写成DarkVampire@Walk。
  • 使用设计文档中的术语:假设文档中称呼一个动画为Die,那么使用DarkVampire@Die,而不要用DarkVampire@Death。
  • 保持细节修饰词在左側:DarkVampire,而不是VampireDark;PauseButton,而不是ButtonPaused。举例说明,在Inspector中查找PauseButton,比全部button都以Button开头方便。

    (非常多人倾向于相反的次序,觉得那样名字能够自然的分组。然而,名字不是用来分组的,文件夹才是。

    名字是用来在同一类对象中能够高速辨识的。)

  • 为一个序列使用同一个名字,并在这些名字中使用数字。

    比如PathNode0, PathNode1。永远从0開始,而不是1。

  • 对于不是序列的情况,不要使用数字。比如 Bird0, Bird1, Bird2。本应该是Flamingo, Eagle, Swallow。
  • 为暂时对象加入双下划线前缀。比如__Player_Backup。

为同一事物的不同方面命名

在核心名称后面加入下划线,后面的部分代表哪个方面。

比如

  • GUI中的button状态:EnterButton_Active、EnterButton_Inactive
  • 贴图: DarkVampire_Diffuse, DarkVampire_Normalmap
  • 天空盒:JungleSky_Top, JungleSky_North
  • LOD分组:DarkVampire_LOD0, DarkVampire_LOD1

结构

场景组织、project文件夹、脚本文件夹应该使用相似的模式。

文件夹结构

[AppleScript] 
1
MaterialsGUIEffectsMeshes  Actors     DarkVampire     LightVampire     ...  Structures     Buildings     ...  Props     Plants     ...  ...PluginsPrefabs  Actors  Items  ...Resources  Actors  Items  ...Scenes  GUI  Levels  TestScenesScriptsTexturesGUIEffects...

场景结构

[size=11.818181991577148px]CamerasDynamic ObjectsGameplay   Actors   Items   ...GUI   HUD   PauseMenu   ...ManagementLightsWorld   Ground   Props   Structure   ...

[size=11.818181991577148px]脚本文件夹结构

[size=11.818181991577148px]ThirdParty   ...MyGenericScripts   Debug   Extensions   Framework   Graphics  IO   Math   ...MyGameScripts   Debug   Gameplay      Actors      Items      ...   Framework   Graphics   GUI   ...

Unity3D游戏开发最佳实践20技巧(三)的更多相关文章

  1. Unity3D游戏开发最佳实践20技巧(一)

    关于这些技巧这些技巧不可能适用于每一个项目. 这些是基于我的一些项目经验.项目团队的规模从3人到20人不等. 框架结构的可重用性.清晰程度是有代价的--团队的规模和项目的规模决定你要在这个上面付出多少 ...

  2. Unity3D游戏开发最佳实践20技能(两)

    [扩展和MonoBehaviourBase] 21.扩展一个自己的Mono Behaviour基类.然后自己的全部组件都从它派生 这能够使你方便的实现一些通用函数.比如类型安全的Invoke.或者是一 ...

  3. Android和PHP开发最佳实践

    Android和PHP开发最佳实践 <Android和PHP开发最佳实践>基本信息作者: 黄隽实丛书名: 移动应用开发技术丛书出版社:机械工业出版社ISBN:9787111410508上架 ...

  4. [Unity3D]Unity3D游戏开发《反对》说到游戏(上)——目标跟踪

    朋友,大家好.我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 首先博主要自我反省,过了这么久才来更新博客,这段时间主要是在忙着写期末的作业,所以博主基本上没 ...

  5. [Unity3D]Unity3D游戏开发之跑酷游戏项目解说

    大家好,我是秦元培.我參加了CSDN2014博客之星的评选,欢迎大家为我投票,同一时候希望在新的一年里大家能继续支持我的博客. 大家晚上好.我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.c ...

  6. iOS应用开发最佳实践

    <iOS应用开发最佳实践> 基本信息 作者: 王浩    出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16 ...

  7. Web前端开发最佳实践(3):前端代码和资源的压缩与合并

    一般在网站发布时,会压缩前端HTML.CSS.JavaScript代码及用到的资源文件(主要是图片文件),目的是加快文件在网络中的传输,让网页更快的展现.当然,CDN分发.缓存等方式也是加快代码或资源 ...

  8. MongoDB开发最佳实践

    MongoDB开发最佳实践 连接到MongoDB · 关于驱动程序:总是选择与所用之MongoDB相兼容的驱动程序.这可以很容易地从驱动兼容对照表中查到: · 如果使用第三方框架(如Spring Da ...

  9. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

随机推荐

  1. 1036 Boys vs Girls (25)(25 point(s))

    problem This time you are asked to tell the difference between the lowest grade of all the male stud ...

  2. BZOJ 3172 [Tjoi2013]单词 AC自动机Fail树

    题目链接:[http://www.lydsy.com/JudgeOnline/problem.php?id=3172] 题意:给出一个文章的所有单词,然后找出每个单词在文章中出现的次数,单词用标点符号 ...

  3. Java实现杨辉三角形

    Java实现杨辉三角形 一.源代码:YFTriangle.java package cn.com.zfc.day009; import java.util.Scanner; /** * 打印杨辉三角形 ...

  4. BZOJ.5329.[SDOI2018]战略游戏(圆方树 虚树)

    题目链接 显然先建圆方树,方点权值为0圆点权值为1,两点间的答案就是路径权值和减去起点终点. 对于询问,显然可以建虚树.但是只需要计算两关键点间路径权值,所以不需要建出虚树.统计DFS序相邻的两关键点 ...

  5. N!(N的阶乘)最末位非0的求解方法

    问题是求关于N!的最后一位非0位, 如3!=6,最后一位非0位为6, 5!=120, 最后一位非0位为2.怎么样快速的求出最后一位非0位呢? 最朴素的想法就是先求出N!的结果,再求出结果的最后一位非0 ...

  6. hdu 5288 OO’s Sequence(2015多校第一场第1题)枚举因子

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288 题意:在闭区间[l,r]内有一个数a[i],a[i]不能整除 除去自身以外的其他的数,f(l,r ...

  7. poj 3164

    朱刘算法 步骤: 1.计算出每个点边权最小的边的权(如果除根以外有其他的点没有入边,则不存在最小树形图),并记下边的另一个端点(称其为这个点的前趋) 2.沿着每个点向上走,如果在走到根或环上的点之前, ...

  8. Elasticsearch快速入门案例

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  9. JavaScript将具有父子关系的原始数据格式化成树形结构数据(id,pid)

    前几天遇到一个树型组件(类似树形菜单)数据格式化的问题,由于后台把原始查询的数据直接返回给前端,父子关系并未构建,因此需要前端JS来完成,后台返回的数据和下面的测试数据相似. var data=[ { ...

  10. C#高级编程9-第7章 运算符和类型强制转换

    运算符和类型强制转换 1.运算符 运算符的简化操作 条件运算符: if-else的简化操作,也称三元运算符.如果条件为真,返回一个值,为假返回另外一个值. condition?true_value:f ...