近期热门
粉丝908
关注 204
获赞 1005
Unity3D可以作为学习资料的编程规范

[U3D] Unity3D可以作为学习资料的编程规范

[复制链接]
3892 4 0 0 11年前 举报
以FooBar这个单词为例,我们简单概括:

变量小写字母起头: bool fooBar = false;
函数大写字母起头: void FooBar ();
函数参数加以 “_” + 小写字母起头: void MyFunction ( int _fooBar );
public, private, protected, internal 写最前面
static, const, virtual, override 放中间, 多个混合顺序随意
Serialize 和 NonSerialize 的属性分段定义
内嵌Class,Enum的定义放最上方,接着是static变量,接着是Serialize变量,接着是NonSerialize变量,接着是static函数,最后是其他函数.
变量定义
Unity3D中变量的定义和Inspector显示以及Serialize挂钩(具体参考Member Data和Inspector, Serialize的关系)。所以在定义中我们不采用匈牙利命名规则(m_, s_, g_),而是直接以变量名的小写字母起头进行定义。

以FooBar为例,定义如下:

public bool fooBar = false;
或者

public bool foobar = false;
有时候我们会做出带get,set函数的属性定义,并带有serialize字段,这种情况下我们建议定义方法如下:

[SerializeField] protected int fooBar_ = 10;
public int fooBar {
get { return fooBar_; }
set {
if ( fooBar_ != value ) {
fooBar_ = value;
Debug.Log("fooBar changed");
}
}
}
虽然没有强调为变量赋默认值,但是给变量赋于初始值是一个好习惯。有些变量如 List<T> 在没有默认初始化定义的情况下,会出现null reference错误,如:

private List<int> fooBarList; // 第一次使用的时候如果没有new List与它会出现null reference的错误
private List<int> fooBarList = new List<int>();
函数定义
函数定义统一以大写字母起头,如一个名为FooBar的函数,定义为:

public void FooBar () {
...
}
函数中的参数,以”_” + 小写字母起头参数定义。如参数名 “Do Update” 将定义为:

public void FooBar ( bool _doUpdate ) {
....
}
这样做可以避免掉参数和成员变量重名的问题,也方便代码阅读,明确哪些是外部参数

修饰符定义
修饰符分两批

存取修饰符: public, protected, private, internal
其他修饰符: static, const, virtual, override, readonly … 等
存取修饰符在定义是放在最前面,其他修饰符在存取修饰符之后。如:

public static int fooBar = 0;
protected void FooBar () { ... }
括号{}的书写位置
我们对{,}的书写定义没有强制要求,根据个人编程习惯来书写,有的人习惯写:

if ( ... ) {
...
}
而也有喜欢书写:

if ( ... )
{
...
}
这都是可行的。

空格符的书写
定义函数时,以下几种书写习惯都是可行的:

void MyFunction ( int _a, int _b, int _c ) { ... }
void MyFunction(int _a, int _b, int _c) { ... }
定义变量时,必须在”=“两边各空出一格以上

int foobar = 0;
Serialize 和 Non-Serialize 数据定义请分开
有些人习惯按照public, private来书写数据段。在Unity3D中,由于Serialize和Inspector显示关联紧密,书写的时候请按照Serialize, Non-Serialize来做第一层划分,之后可以根据个人喜好选择public, protected等情况的划分。如:

///////////////////////////////////////////////////////////////////////////////
// serialize
///////////////////////////////////////////////////////////////////////////////

public int foobar01 = 0;
public float foobar02 = 0.0f;
[SerializeField] protected int foobar03 = 1;

///////////////////////////////////////////////////////////////////////////////
// non-serialized
///////////////////////////////////////////////////////////////////////////////

private int myFoobar01 = 0;
[System.NonSerialized] public float myFoobar02 = 0.0f;
定义顺序
定义顺序并没有做强制要求,这里给出一个推荐的定义顺序:

public class MyFooBar {

// ---------------------------
// nested classes, enums
// ---------------------------

// classes
[System.Serializable]
class Data {
int id = -1;
string name = "";
}

// enums
enum Type {
Human = 0,
Dragon,
Slime
}

// delegates
public delegate void EventHandler ();
public delegate void StateUpdate ();

// ---------------------------
// variables
// ---------------------------

// static variables
public static MyFooBar instance = null;
static intialized = false;

// serialized
public Data data = new Data();
public float hp = 100.0f;
public float mp = 50.0f;

// non-serialized
float curSpeed = 0.0f;
float curHp = 0.0f;
float curMp = 0.0f;

// ---------------------------
// functions
// ---------------------------

// static functions
public static void Init () { ... }

// other functions
public void Attack () { ... }
void CalcDamage () { ... }
}

原文链接:http://www.cnblogs.com/oldman/articles/2409578.html
0
点赞
0
打赏
0
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论5
您需要登录后才可以回帖 登录

不错,规范是很重要的
10年前
回复

使用道具 举报

{:7_267:}{:7_267:}{:7_267:}{:7_267:}
10年前
回复

使用道具 举报

{:soso_e160:}
11年前
回复

使用道具 举报

顶顶顶顶顶顶顶大地
11年前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器