过年11天假期,带娃带了7天,吃吃喝喝。也看了点书,《射雕英雄传》(书)看了一半,还有就是在看《unity官方案例精讲》这本。
随手记一些自觉有价值或者有意思的点。
1. 对脚本中变量设定range
[Range(0.0f, 10.0f)]
public float speed = 0.0f;
2. 交叉数组(Jagged Array)
(1)声明交叉数组可以指定数组的行数,但不能指定列数
(2)交叉数组的长度(Length)等于行数
(3)交叉数组的每一行元素都是一个一维数组
void TestJaggedArray()
{
int[][] mArr1 = new int[][]; //声明一个3行的交叉数组
mArr1[] = new int[] { , , , , , , }; //为交叉数组mArr1一行元素赋值
print(mArr1.Length); //输出3 int[][] mArr2 = new int[][] { new int[] { , , }, new int[] { , , , , }, new int[] { , , , } }; //声明并初始化一个3行的交叉数组
print(mArr2.Length); //输出3 int[][] mArr3 = new int[][] { new int[] { , }, new int[] {, , }, new int[] { , , , }, new int[] { , , , , , }}; // 声明一个4行的交叉数组,行数未指定,由编译器根据初始值推断 int[][] mArr4; // 声明一个交叉数组,未初始化,未指定行数 foreach(var a in mArr2)
{
print(a.Length); //输出每一行中元素的个数
foreach(var b in a)
print(b); //输出每一行上的元素
}
}
对比下普通二维数组:
void Test2DArray()
{
int[,] arr1 = new int[, ]; //声明一个3x4的二维数组arr1
arr1[,] = ;
arr1[,] = ;
print(arr1.Length); //输出12 int[,] arr2 = new int[, ] { {, , }, {, , }}; //声明并初始化一个2x3的二维数组arr2
print(arr2.Length); //输出6 //遍历二维数组中的元素
for(int i = ; i < ; ++i)
for(int j = ; j < ; ++j)
print(arr2[i,j]); //输出1 2 3 4 5 6
}
3.Net Reflector
.NET Reflector,是一个可以将以.NET Framework为基础开发出来的的DLL或EXE文件,反编译为原始程序的工具软件。
装了下这软件(然后破解了= =),然后把C:\Program Files\Unity\Editor\Data\Managed(我的路径)下的UnityEngine.dll和UnityEditor.dll拖进去:
mscorlib是CLR的library,上面这个么就慢慢翻看了。。。
4. Script Execution Order
之前组内分享的时候说同一个对象下的script,无法指定哪个先执行哪个后执行。确实:
“默认情况下,不同的脚本的Awake,OnEnable,Update函数根据脚本的加载顺序来依次调用(脚本的加载顺序是不确定的)。”
在Edit/Project Settings/Script Execution Order里可以指定顺序:
可以把脚本拖进去,然后上下交换位置,在上面的先执行。