7个重要的事项,帮助你整理Unity工程

原文链接:http://www.manew.com/thread-90492-1-1.html


有天,我在 Quora 遇到一个人,他问我,程序员们是如何写出超过10万行代码的工程的。当软件越大,越难管理,这是事实。如果你不能有效的管理你的工程,你就需要花大量的时间来保持开发的节奏。然后,你会发现你把开发新功能的时候,来整理混乱的工程。这是在任意Unity工程中都值得注意的事情。这里是一些重要的提示,帮助你管理你的工程。

1.目录结构
我们谈到组织不得不提到组织你的工程目录。在这一方面,Unity给你完全自由,但是因为这样,可能经常会有一些麻烦。这是我自己用的目录结构:

        • 3rd-Party
        • s
        • Audio 
                ○ Music
                ○ SFX
        • Materials
        • Models
        • Plugins
        • Prefabs
        • Resources
        • Textures
        • Sandbox
        • Scenes 
                ○ Levels
                ○ Other
        • Scripts 
                ○ Editor
        • Shaders
        
        1. 在根目录不要存储资源文件。尽可能使用子目录。
        
        2. 不要在根目录创建一些额外的目录,除非你真的需要。
        
        3. 统一命名,如果你决定 目录使用  骆驼拼写法,而资源使用小写,那就坚持下去。
        
        4. 不要试图把特别的资源移到一般目录中,例如,模形的材料(Materials),不要移到Materials目录中去,因为,后面,你会不知道它们是从哪里来的。
        
        5. 使用3rd-Party目录存储从Asset Store导入的资源。他们通常有他们自己的结构,不应该改变。
        
        6. 使用Sandbox 目录做实验,存储那些你不太确定的东西。而做这样的事情,你需要关心的事情是正确的组织结构。做你想做的,然后移除它,或当你确定你需要将它添加到你的工程中时,组织好它。如果你跟别人一起工作在一个工程上,创建你自己的沙盒子目录,像是 Sandbox/JohnyC。

2.场景层次结构

讲完工程的层次结构,现在来说说场景的层次。在这之前,我会给你一个模板。你可以按你的需求修改它:
        • Management
        • GUI
        • Cameras
        • Lights
        • World 
                ○ Terrain
                ○ Props
        • _Dynamic
        
这里有一些规则你需要遵守:
        1. 所有空物件应该定位于 0,0,0这个位,默认的旋转角度和缩放。
        
        2. 在运行中,你实例化了一个物件时,把它放在_Dynamic下面,不要放在根目下,否则,你会很难定位到它。
        
        3. 那些只是加载了脚本的空物体,使用 “@”前缀,例如 @Cheats
        
3.每个物件都可以使用perfabs

在Unity中Prefabs并不只是预设,在共享预配层次时,你会发现他们是最好用的东西。一般来说,在你的场景中尽可能多的使用prefab。你创建一个新的关卡,从无到有,只需要增加几个perfabs就可以了。

需要使用Perfab的原因是,一个perfab源文件修改了,所有的实例都修改了。100个关卡需要增加相机效果,没问题,如果你的相机是perfab,只需要在相机prefab上加上效果就可以了。

请注意,你不能为perfab上再嵌套一个perfab,但可以使用链接替代,留出一个属性,指定一个perfab。当实例被创建时,指定它。当有需要时,可以考虑在Awake()或是onEnable()里面自动连接prefab实例。

4.学会如何使用版本控制(VCS)
你可能已经知道 GIT,SVN或 其他的VCS。实际上,“知道 ”只是你学习的一小部分。你应改把焦点放在那些重要的功能,而不是你经常使用的功能上。为什么?因为大部分版本控件的软件比你想象中更高大,不幸的是,大部分用户只用到了备份和同步解决方案的功能。例如,你知不知道GIT允许你隐藏你的改变。所以,你可以工作在这之上,不向主版本提交任何数据。

程序员倾向于在需要时对块代码进行注释。如果你学会使VCS如何快速浏览文件之前的版本,不要这样做。如果你很熟悉这个功能,你的代码看起来会更好,没有了不需要的大量注释。

这里有个非常好的资 源给GIT用户:http://gitready.com/

5.学会写编辑器脚本
在可扩展性上来说,Unity是一个伟大的游戏引擎(看看Asset Store)。学会如何定编辑器脚并利用这些知识,你不需要为你的脚本创建界面,它可以是一些简单的事情,好像一个菜单,做一些有用的。这里有一些编辑器脚本的建议,不久之前,我自己也创建 过:

        • Google电子表格CVS下载——在Google Drive上有一个翻译表格。它可以自动下载最新的版本,生成CVS文件,所以,我从来不需要手动做这些。
        
        • 随机树木的位置,旋转,大小——得到更多的树,希望它看上去像一个森林,而不是在一格一格的。
        
        • 创建布局——为特别的目标、ZIP文件中的所有文件,复制到正确的地方。
        
        • 源代码中的字串替换——得到包含应用版本的所有文件
        
你可以在这里学到如何创建编辑器脚本:http://docs.unity3d.com/Manual/ExtendingTheEditor.html


6.学会防御性编程
你有没有听说过防御性编程?WIKI是这样定义它的:
        防御性编程是一种防御性设计,在意外情况时保证软件功能能继续使用。防御性编程技术常被用于软件被滥用时。
        
一般来说,当你写了MonoBehaviours时,你一定要确认一下:
        • 所有的依赖都被设置了
        
        • 所有需要的组件都存在
        
        • 如果你使用全局唯一的数据,确保他们都存在
        
        • 如果你查找物件,期待找到什么,要尽可能快
        
        • 在你行运场景前,对混合编辑器代码 (ExecuteInEditMode and #if UNITY_EDITOR)做更多的检查
        
你可以在资源上做很多检查,你可以读一下 NullPointerException Part 1 and 2. http://blog.theknightsofunity.com/story-nullreferenceexception-part-12/

7.实现在编辑器 并(或)在游戏中的作弊
你学会如何写编辑器代码之后,你应该能写一套编辑器的作弊功能。作为一个菜单项,它可能解锁一些东西(各级实例),创建它非常容易:

[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
class Cheats
{
     [MenuItem( "My Game/Cheats/Unlock All Levels" )]
     public static void UnlockAllLevels()
     {
         if (Application.isPlaying)
         {
             // unlock code here...
         } else {
             Debug.LogError( "Not in play mode." );
         }
     }
}


一般来说,你可以写这些:
        • 解锁所有层次,角色,道具等等
        
        • 让自己不死
        
        • 增加/减少一些值,像 时间、金钱、金币,等等
        
        • 允许你看到一些玩家看不到的东西
        
        • 其他一些帮助你欺骗有游戏的事情
        
当然,更实用是在游戏中作弊(但也很难写),这些类型的作弊可以在Unity编辑器之个执行,但是你必须想一想如何执行它。看看我们另一篇文章用鼠标实现一个作弊系统。 http://blog.theknightsofunity.com/implement-game-cheats-subsystem-within-unity/

猜你喜欢

转载自blog.csdn.net/a673544319/article/details/79593557