首页 > 代码库 > Unity3D游戏开发最佳实践20技巧(三)
Unity3D游戏开发最佳实践20技巧(三)
欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。
【文本】
38、如果你有很多的剧情文本,那么把他们放到一个文件里面。不要把他们放到Inspector的字段中去编辑。这些需要做到不打开Unity,也不用保存Scene就可以方便的修改。
39、如果你计划实现本地化,那么把你的字符串分离到一个统一的位置。
有很多种方法来实现这点。例如,定义一个文本Class,为每个字符串定义一个public的字符串字段,并把他们的默认值设为英文。其他的语言定义为子类,然后重新初始化这些字段为相应的语言的值。
另外一种更好的技术(适用于文本很大或者支持的语言数量众多),可以读取几个单独的表单,然后提供一些逻辑,根据所选择的语言来选取正确的字符串。
【测试与调试】
40、实现一个图形化的Log用来调试物理、动画和AI。
这可以显著的加速调试工作。详见这里。
41、实现一个HTML的Log。
在很多情况下,日志是非常有用的。拥有一个便于分析的Log(颜色编码、有多个视图、记录屏幕截图等)可以使基于Log的调试变动愉悦。详见这里。
42、实现一个你自己的帧速率计算器。
没有人知道Unity的FPS计算器在做什么,但是肯定不是计算帧速率。实现一个你自己的,让数字符合直觉并可视化。
43、实现一个截屏的快捷键。
很多BUG是图形化的,如果你有一个截图,就很容易报告它。一个理想的系统,应该在PlayerPrefes中保存一个计数,并根据这个计数,使得所有成功保存的截屏文件都不被覆盖掉。截屏文件应该保存在工程文件夹之外,这可以防止人们不小心把它提交到版本库中。
44、实现一个打印玩家坐标的快捷键。
这可以在汇报位置相关的BUG时明确它发生在世界中的什么位置,这可以让Debug容易一些。
45、实现一些Debug选项,用来方便测试。
一些例子:
- 解锁所有道具;
- 关闭所有敌人;
- 关闭GUI;
- 让玩家无敌;
- 关闭所有游戏逻辑;
设置一个用户标识文件,单不要提交到版本库,在游戏运行时读取它。下面是原因:
- 团队的成员不会因为意外的提交了自己的Debug设置而影响到其他人。
- 修改Debug设置不需要修改场景。
例如,一个场景,包括所有的敌人,所有可以交互的对象等等。这样可以不用玩很久,而进行全面的功能测试。
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开头方便。(很多人倾向于相反的次序,认为那样名字可以自然的分组。然而,名字不是用来分组的,目录才是。名字是用来在同一类对象中可以快速辨识的。)
- 为一个序列使用同一个名字,并在这些名字中使用数字。例如PathNode0, PathNode1。永远从0开始,而不是1。
- 对于不是序列的情况,不要使用数字。例如 Bird0, Bird1, Bird2,本应该是Flamingo, Eagle, Swallow。
- 为临时对象添加双下划线前缀,例如__Player_Backup。
为同一事物的不同方面命名
在核心名称后面添加下划线,后面的部分代表哪个方面。例如
- GUI中的按钮状态:EnterButton_Active、EnterButton_Inactive
- 贴图: DarkVampire_Diffuse, DarkVampire_Normalmap
- 天空盒:JungleSky_Top, JungleSky_North
- LOD分组:DarkVampire_LOD0, DarkVampire_LOD1
结构
场景组织、工程目录、脚本目录应该使用相似的模式。
目录结构
[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 ...
更多精彩请点击 http://www.gopedu.com/
Unity3D游戏开发最佳实践20技巧(三)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。