美文网首页unity
Unity项目工程结构(一)

Unity项目工程结构(一)

作者: EternalSunLhx | 来源:发表于2016-05-24 22:14 被阅读3314次

    转自:不以规矩,不成方圆 unity3d系列教程二

    https://github.com/CodeSuperHero/UnityFrame 本博客所有关于unity3d的源码均包含在此工程中。

    不以规矩,不成方圆
    本文章定位于新手进阶,从新手过渡到中级开发人员,首先重视第一条就是规矩,我是从新手走过来的,现在打交道最多的也是新手,观新手代码,最大感受就是没有规矩,看起来杂乱无章,先不论其它,第一眼过去就完全没什么心情继续查看了,而却杂乱的代码带来很多负面影响,诸如维护性差,不可查找,工程结构混乱等等。

    那么到底要注意什么规矩?

    规矩其一:代码规范

    规矩其二:代码框架

    规矩其三:工程结构

    代码规范
    先上代码

    
    1 //CodeSuperHero 20150520  
    
    2 //R1    XXX 20150520  
    
    3 //      xxxxxxxxx  
    
    4 //      xxxxxxxxx  
    
    5 //R2    YYY 20150520  
    
    6 //      yyyyyyyyy  
    
    7 //      yyyyyyyy  
    
    8  
    
    9   using UnityEngine; 
    
    10 using System.Collections; 
    
    11  
    
    12 //类说明以顶部为例,尽量简化信息
    
    13 //第一行用 //"name"+"Tab"+"time"作为开发者的信息 
    
    14 //后续更改以R+版本号为开头,用tab分隔,加上名字,时间和更改内容
    
    15  
    
    16 //类,结构体,接口,枚举,变量,方法的注释均以 "///" 注释。在代码中间的注释可以选择 "//"或者 "/*  */" 
    
    17  
    
    18 namespace UnityFrame.Example 
    
    19 { 
    
    20    ///
    
    21    /// 结构体以大写字母"S"开头。
    
    22    /// 之所以特别区分,是因为在CSharp代码中,结构体是值类型,存储在栈上,每次传递和赋值均会被复制。所以用S开头以明显区分结构体和类。 
    
    23    ///  
    
    24    public struct SExample 
    
    25    { 
    
    26  
    
    27    } 
    
    28  
    
    29    ///
    
    30    /// 枚举变量以大写字母"E"开头
    
    31    ///
    
    32    public enum EExample 
    
    33    { 
    
    34  
    
    35    } 
    
    36  
    
    37    ///
    
    38    /// 范例接口,接口声明以大写 “I”字母开头。
    
    39    ///
    
    40    public interface IExample 
    
    41    { 
    
    42        void ExampleFunc(int threeExample); 
    
    43    }
    
     44  
    
    45    ///
    
    46    /// 范例类
    
    47    ///
    
    48    public class Example : IExample 
    
    49    { 
    
    50        ///
    
    51        /// 常量全部字母大写,以_连接字母
    
    52        ///
    
    53        public const int EXAMPLE_ZERO = 0; 
    
    54  
    
    55        ///
    
    56        /// 静态变量每个单词首字母大写
    
    57        ///
    
    58        public static int ExampleZero = 0; 
    
    59  
    
    60        ///
    
    61        /// 私有变量以“m”开头,单词首字母大写
    
    62        ///
    
    63        private int mZeroExample = 0; 
    
    64  
    
    65        ///
    
    66        /// 保护变量与私有变量一样
    
    67        ///
    
    68        protected int mOneExample = 1; 
    
    69  
    
    70        ///
    
    71        /// 公有变量首字母小写,其余单词首字母大写
    
    72        ///
    
    73        public int twoExample = 2; 
    
    74  
    
    75        ///
    
    76        /// 属性同公有变量
    
    77        ///
    
    78        public int zeroExample 
    
    79        { 
    
    80            get 
    
    81            { 
    
    82                return mZeroExample; 
    
    83            } 
    
    84            set
    
    85            { 
    
    86                mZeroExample = value; 
    
    87            } 
    
    88        } 
    
    89  
    
    90        ///
    
    91        /// 公有方法每个单词均首字母大写
    
    92        ///
    
    93        ///
    
    94        public void ExampleFunc(int threeExample) 
    
    95        { 
    
    96  
    
    97        } 
    
    98  
    
    99        ///
    
    100        /// 私有方法同公有方法
    
    101        ///
    
    102        ///
    
    103        ///
    
    104        void ExampleFunTwo(int threeExample, int fourExample)
    
    105        {
    
    106            //在程序中间注释使用"//"在待注释代码上面一行。
    
    107            //如果代码中出现有大量参数罗列,或者一行代码必须写很长的时候可以用"/*  */"在程序中直接进行注释,方便阅读。
    
    108            int[] indexArray = new int[5] { 1, /* 第二个值 */ 2, 3, 4, 5 };
    
    109        }
    
    110    }
    
    111 }
    
    

    我喜欢直接以代码进行说明,不喜欢看纯文字那种,半天都无法理解具体意图。

    代码中注释已经讲解了大半,还有隐含在代码中的有

    1.统一的缩进,tab键设置为4个空格。

    2.统一的大括号位置。

    3.所有的逗号分隔后面必须空格。

    4成员变量,成员函数之间直接留一行空格。

    5.所有变量名必须是可读的。

    注:代码风格我并没有严格参照某种代码风格命名,而是加了一点点自己的喜好进去。

    代码框架
    代码框架我暂时还没办法实际举例,如感兴趣,可以持续关注本教程,会在后续文章讲解。

    简单描述就是 代码框架约束和规范了你的逻辑应该写在什么地方,你应该怎么去通信,而不是按照以前的方式随意使用静态变量,单例来书写逻辑。

    工程结构
    工程结构是约束整个unity3d工程的文件存放位置。想想你有一个大型的项目文件柜,而这些文件就好比一堆项目资料,对比一个整理完善、有序存放的文件柜,和一个文件互相交错,存放无序的文件柜,我相信你一定会选择第一个,因为第二个对于你来说就是噩梦般的存在。废话不多说,我先上我得工程目录结构

    212353520726966.png

    如果你能严格按照这个目录,整个工程就可以从始至终保持这个结构而不凌乱。

    Assets    #unity3d 默认主目录。

    -----Editor #编辑器类存放文件夹。

    -----ExternalLibraries #大型完善的外部库文件存放目录,如NGUI等拥有完善的目录结构和大量代码的插件,就存放在此目录。有些人喜欢把NGUI目录直接存放在plugins目录下其实是不太好的,因为plugins文件夹也是要参与编译的。

    -----GameAssets #游戏美术资源存放地,因为美术童鞋都是单独工程进行编辑,然后导出unitypackage文件,这个文件最大的坏处就是在导入时可能会污染目录结构,导致每次导入文件,均要手动调整目录,而单独命名一个GameAssets目录,再把这个目录复制到美术童鞋的工程里面,让美术童鞋编辑玩资源后,只把需要导出的资源放入这个目录存放妥当,再导出unitypackage文件。

    ------------|Materials  #材质球。

    ------------|Models   #模型,如果动画系统采用animation,把动画文件和原始模型存放在同一目录下,如果采用animtor,因为动画重用的关系,动画文件需单独存放。

    ------------|Animations #用新的Mecanim时,存放动画文件。

    ------------|Prefabs  #预制体,所有不需要Resource.Load加载的预制体,均存放在此。

    ------------|Sounds  #声音文件

    ------------|Textures  #贴图文件

    ------------|UI     #一些UI文件,如Atlas等。

    ------Plugins  #dll和一些纯代码插件。

    ------Resources  #所有需要通过Resource.Load加载的资源都存放于此

    ------Scenes    #scenes文件存放目录

    ------Scripts    #代码目录

    ------StreamingAssets

    相关文章

      网友评论

      本文标题:Unity项目工程结构(一)

      本文链接:https://www.haomeiwen.com/subject/wbnzrttx.html