EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

[Unity]为什么我需要使用[SerializeField] ?它是用来干什么的?

这种以 [      ] 的写法其实在.NET Core Mvc框架里面很常见了,经常用于[约束],

最常见的是定义主键和外键,以便于ORM框架正确理解并生成对应的数据库。

 

在Unity中,这种写法也是为了让框架能够正确理解:

[SerializeField] 你想在面板序列化显示,但不想其它脚本访问它,通常和private连用

[HideInInspector] 你不想在面板中显示,但你想让其它脚本访问它,通常和public连用

 

 

注意点:
① [SerializeField]不可用于static变量。
② [SerializeField]private float m_xx 在Inspector中只会显示xx。
③ m_开头表示类的成员变量m为member的缩写,这是个习惯问题。

 

有一个命名规范:
1. 非公有的变量前面要加上小写m
2. 静态变量前面加上小写s
3. 其它变量以小写字母开头
4. 静态变量全大写

 

关于访问修饰符:

① 在一个类中,成员或方法前不加,默认就是 private;

② 类前不加,默认是internal,当前程序集能访问
→ 不是同命名空间,即使引用了命名空间也无法访问
→ 程序集,即CLR认为你在同一个集合里面
→ 默认是你在.NET Framework刚刚建立的控制台项目,算一个程序集;建立的一个类库,算另一个程序集。
具体例子参考 https://www.v2know.com/MainPage/PreView/195

 

朋友Assembly:我们可以说,控制台项目的【朋友Assembly】是那个类库。

我们可以发现,即使引入命名空间,被标记了internal的类是看不到的。

 

在Unity当中,不存在程序集的概念,每个.cs文件都是独立的脚本。(先这么理解)

 

 

参考文档:
[1] Why should I use SerializeField?    
[2] 以m_开头的变量为什么在Insepector面板中不显示?

This article was last edited at 2020-03-25 14:14:11

* *