zoukankan      html  css  js  c++  java
  • 不以规矩,不成方圆 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     /// <summary>
     21     /// 结构体以大写字母"S"开头。
     22     /// 之所以特别区分,是因为在CSharp代码中,结构体是值类型,存储在栈上,每次传递和赋值均会被复制。所以用S开头以明显区分结构体和类。
     23     /// </summary>
     24     public struct SExample
     25     {
     26 
     27     }
     28 
     29     /// <summary>
     30     /// 枚举变量以大写字母"E"开头
     31     /// </summary>
     32     public enum EExample
     33     {
     34 
     35     }
     36 
     37     /// <summary>
     38     /// 范例接口,接口声明以大写 “I”字母开头。
     39     /// </summary>
     40     public interface IExample
     41     {
     42         void ExampleFunc(int threeExample);
     43     }
     44 
     45     /// <summary>
     46     /// 范例类
     47     /// </summary>
     48     public class Example : IExample
     49     {
     50         /// <summary>
     51         /// 常量全部字母大写,以_连接字母
     52         /// </summary>
     53         public const int EXAMPLE_ZERO = 0;
     54 
     55         /// <summary>
     56         /// 静态变量每个单词首字母大写
     57         /// </summary>
     58         public static int ExampleZero = 0;
     59 
     60         /// <summary>
     61         /// 私有变量以“m”开头,单词首字母大写
     62         /// </summary>
     63         private int mZeroExample = 0;
     64 
     65         /// <summary>
     66         /// 保护变量与私有变量一样
     67         /// </summary>
     68         protected int mOneExample = 1;
     69 
     70         /// <summary>
     71         /// 公有变量首字母小写,其余单词首字母大写
     72         /// </summary>
     73         public int twoExample = 2;
     74 
     75         /// <summary>
     76         /// 属性同公有变量
     77         /// </summary>
     78         public int zeroExample
     79         {
     80             get
     81             {
     82                 return mZeroExample;
     83             }
     84             set
     85             {
     86                 mZeroExample = value;
     87             }
     88         }
     89 
     90         /// <summary>
     91         /// 公有方法每个单词均首字母大写
     92         /// </summary>
     93         /// <param name="threeExample"></param>
     94         public void ExampleFunc(int threeExample)
     95         {
     96 
     97         }
     98 
     99         /// <summary>
    100         /// 私有方法同公有方法
    101         /// </summary>
    102         /// <param name="threeExample"></param>
    103         /// <param name="fourExample"></param>
    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工程的文件存放位置。想想你有一个大型的项目文件柜,而这些文件就好比一堆项目资料,对比一个整理完善、有序存放的文件柜,和一个文件互相交错,存放无序的文件柜,我相信你一定会选择第一个,因为第二个对于你来说就是噩梦般的存在。废话不多说,我先上我得工程目录结构

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

      Assets        --- unity3d 默认主目录

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

      ExternalLibraries  --- 大型完善的外部库文件存放目录,如NGUI等拥有完善的目录结构和大量代码的插件,就存放在此目录。有些人喜欢把NGUI目录直

                  接存放在plugins目录下其实是不太好的,因为plugins文件夹也是要参与编译的

      GameAssets     --- 游戏美术资源存放地,因为美术童鞋都是单独工程进行编辑,然后导出unitypackage文件,这个文件最大的坏处就是在导入时可能

                    会污染目录结构,导致每次导入文件,均要手动调整目录,而单独命名一个GameAssets目录,再把这个目录复制到美术童鞋的工程

                  里面,让美术童鞋编辑玩资源后,只把需要导出的资源放入这个目录存放妥当,再导出unitypackage文件。

        Materials    --- 材质球

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

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

        Sounds      --- 声音文件

        Textures    --- 贴图文件

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

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

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

      Scenes         --- scenes文件存放目录

      Scripts       --- 代码目录

      StreamingAssets

      Temp        

      

      最后

      三个规则都已讲解完毕,已经熟练使用UNITY3D功能的你,赶快学习了,准备迈入新的开发层次吧。

      Good Light!

  • 相关阅读:
    React学习笔记(六)事件处理
    React学习笔记(五)State&声明周期
    学会装逼,你的人生可能会开挂
    Go指南
    JavaScript检测数据类型
    $.on()方法和addEventListener改变this指向
    JavaScript返回上一页
    js继承
    js原型二
    全局变量与局部变量
  • 原文地址:https://www.cnblogs.com/CodeSuperHero/p/4521250.html
Copyright © 2011-2022 走看看