Unity3D游戏开发最佳实践20技巧(三)
【文本】
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文件夹、脚本文件夹应该使用相似的模式。
文件夹结构
|
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技巧(三)的更多相关文章
- Unity3D游戏开发最佳实践20技巧(一)
关于这些技巧这些技巧不可能适用于每一个项目. 这些是基于我的一些项目经验.项目团队的规模从3人到20人不等. 框架结构的可重用性.清晰程度是有代价的--团队的规模和项目的规模决定你要在这个上面付出多少 ...
- Unity3D游戏开发最佳实践20技能(两)
[扩展和MonoBehaviourBase] 21.扩展一个自己的Mono Behaviour基类.然后自己的全部组件都从它派生 这能够使你方便的实现一些通用函数.比如类型安全的Invoke.或者是一 ...
- Android和PHP开发最佳实践
Android和PHP开发最佳实践 <Android和PHP开发最佳实践>基本信息作者: 黄隽实丛书名: 移动应用开发技术丛书出版社:机械工业出版社ISBN:9787111410508上架 ...
- [Unity3D]Unity3D游戏开发《反对》说到游戏(上)——目标跟踪
朋友,大家好.我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 首先博主要自我反省,过了这么久才来更新博客,这段时间主要是在忙着写期末的作业,所以博主基本上没 ...
- [Unity3D]Unity3D游戏开发之跑酷游戏项目解说
大家好,我是秦元培.我參加了CSDN2014博客之星的评选,欢迎大家为我投票,同一时候希望在新的一年里大家能继续支持我的博客. 大家晚上好.我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.c ...
- iOS应用开发最佳实践
<iOS应用开发最佳实践> 基本信息 作者: 王浩 出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16 ...
- Web前端开发最佳实践(3):前端代码和资源的压缩与合并
一般在网站发布时,会压缩前端HTML.CSS.JavaScript代码及用到的资源文件(主要是图片文件),目的是加快文件在网络中的传输,让网页更快的展现.当然,CDN分发.缓存等方式也是加快代码或资源 ...
- MongoDB开发最佳实践
MongoDB开发最佳实践 连接到MongoDB · 关于驱动程序:总是选择与所用之MongoDB相兼容的驱动程序.这可以很容易地从驱动兼容对照表中查到: · 如果使用第三方框架(如Spring Da ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
随机推荐
- AORUS GA-Z270X-Gaming 5開箱
「AORUS」這個品牌名稱由埃及神祇荷魯斯(戰爭與狩獵之神)的名字衍生而成.荷魯斯通常被勾勒為獵鷹的形象,因此獵鷹的頭形被用作AORUS品牌的商標於2014年,本來只做為用在電競筆電及一些週邊方面,但 ...
- [ 原创 ] Java基础6--构造函数和抽象类的性质
构造函数的性质 // A.方法名与类名相同: // B.没有返回类型(例如return.void等):// C.不能被static.final.native.abstract和synchronized ...
- 【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)
A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...
- win 10 文件夹 背景 没效果
韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com
- [CF1086E]Beautiful Matrix(容斥+DP+树状数组)
给一个n*n的矩阵,保证:(1)每行都是一个排列 (2)每行每个位置和上一行对应位置不同.求这个矩阵在所有合法矩阵中字典序排第几.考虑类似数位DP的做法,枚举第几行开始不卡限制,那么显然之前的行都和题 ...
- POI2018
[BZOJ5099][POI2018]Pionek(极角排序+two pointers) 几个不会严谨证明的结论: 1.将所有向量按极角排序,则答案集合一定是连续的一段. 当答案方向确定时,则一个向量 ...
- 【数论】【扩展欧几里得】Codeforces Round #484 (Div. 2) E. Billiard
题意:给你一个台球桌面,一个台球的初始位置和初始速度方向(只可能平行坐标轴或者与坐标轴成45度角),问你能否滚进桌子四个角落的洞里,如果能,滚进的是哪个洞. 如果速度方向平行坐标轴,只需分类讨论,看它 ...
- hdu 4547 LCA **
题意:在Windows下我们可以通过cmd运行DOS的部分功能,其中CD是一条很有意思的命令,通过CD操作,我们可以改变当前目录. 这里我们简化一下问题,假设只有一个根目录,CD操作也只有两种方式: ...
- bzoj 2998 第k小字串
这道题用后缀数组貌似会T. 后缀自动机做法: t==0:第k小的本质不同字串 首先把后缀自动机建出来,我们会得到一个DAG,并且只存在一个点入度为0(我们称之为根),可以证明字符串的任意一个本质不同的 ...
- 使用ViewPager实现android软件使用向导的功能
现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了. 先看下效果图: 首先需要一个布局文件,是FlameLayout组成的,里面包 ...