原文地址:https://catlikecoding.com/unity/tutorials/object-management/object-variety/
阅读国外Coder教程时的笔记,Object Management篇(一)
1.当你的项目中需要频繁创建预制体的时候,可能需要专门一个脚本去管理这些功能,这里估计称为Factory。我们知道引用一个脚本,就必须首先让这个脚本运行起来,即挂载到某个游戏物体上或者写成单例。这里介绍一种新的方法,通过API[CreateAssetMenu]将脚本转化AssetMenu文件,也可以直接拖拽到物体上。
[CreateAssetMenu]
public class ShapeFactory : ScriptableObject {}
如果通过[SerializeField]创建数组变量,可以在配置文件上直接设置数量、赋值,如下
2.关键字 ?:
这个相信很多人都知道,其实就相当于:
if(....){
....
}
else{
.....
}
不同于原来的写法,? :可以直接用到其他语句中,形成复合语句(或者说作为方法参数或赋值参数),例如:
int count = version <= 0 ? -version : reader.ReadInt();
StartCoroutine(LoadLevel(version < 2 ? 1 : reader.ReadInt()));
第一条在判断的同时,也直接完成了赋值。
第二条在判断的同时,也直接作为自定义方法的参数。
这样写可以大大简化代码的书写。
3.定义变量属性时的一些操作
我们在定义变量时,可以为止设定一些属性(也可以不设),一般的写法为:
int a {get;set;}
如果写成 int a{get;private set;},基本把a设为public,也不可以为它赋值。
也可以写成:
int a{
get{
if(A!=null){
return A;
}
else{
Debug.LogError("value error!");
}
}
set{
value=A;
}
}
//或者写成 int a =>单个语句;
//value是自带的变量,代表这个变量的值,这里写的是a的值等于变量A的值
这样可以在里面插入各种各样的语句,丰富功能。
3.使用自定义方法时,提高代码可读性的写法
我们都知道把鼠标停在方法上可以加载方法需要传入一些什么参数,比如:
调用ColorHSV方法需要传入以下参数。
写成代码之后,咋一眼看根本不知道这些数字代表什么意思。
instance.SetColor(Random.ColorHSV(0f, 1f, 0.5f, 1f, 0.25f, 1f, 1f, 1f));
我们可以换一种写法:
instance.SetColor(Random.ColorHSV(
hueMin: 0f, hueMax: 1f,
saturationMin: 0.5f, saturationMax: 1f,
valueMin: 0.25f, valueMax: 1f,
alphaMin: 1f, alphaMax: 1f
));
其实就是传入值前面加上 *变量名:*的关键字而已,功能上没有任何区别,但是更方便了阅读代码的人。
4.关键字var
使用关键字var声明变量,一般用在创建新变量的时候。这个时候变量的类型会自动和new关键字后面的类类型对齐,即
var a =new ClassA();
//这个时候a的类类型就是ClassA
//或者
var a =1;
//这个时候 a的类型就是int
虽然var很方便,但是乱用会使代码变得不清晰。就跟上面说的一样,一般和new搭配使用。或者在使用gameObject.AddComponet的时候一起使用,即
var a= Object.gameObject.AddComponet<ClassA>();
//这个时候a的类型也很明确是ClassA
以上,希望对大家有帮助。