过年11天假期,带娃带了7天,吃吃喝喝。也看了点书,《射雕英雄传》(书)看了一半,还有就是在看《unity官方案例精讲》这本。
随手记一些自觉有价值或者有意思的点。
1. 对脚本中变量设定range
1 [Range(0.0f, 10.0f)] 2 public float speed = 0.0f;
2. 交叉数组(Jagged Array)
(1)声明交叉数组可以指定数组的行数,但不能指定列数
(2)交叉数组的长度(Length)等于行数
(3)交叉数组的每一行元素都是一个一维数组
1 void TestJaggedArray() 2 { 3 int[][] mArr1 = new int[3][]; //声明一个3行的交叉数组 4 mArr1[0] = new int[7] { 1, 2, 3, 4, 5, 6, 7}; //为交叉数组mArr1一行元素赋值 5 print(mArr1.Length); //输出3 6 7 int[][] mArr2 = new int[3][] { new int[3] { 1, 2, 3 }, new int[5] { 4, 5, 6, 7, 8}, new int[4] { 3, 4, 5, 6 } }; //声明并初始化一个3行的交叉数组 8 print(mArr2.Length); //输出3 9 10 int[][] mArr3 = new int[][] { new int[] { 1, 2}, new int[] {3, 4, 5}, new int[] { 6, 7, 8, 9}, new int[] { 10, 20, 30, 40, 50, 60}}; // 声明一个4行的交叉数组,行数未指定,由编译器根据初始值推断 11 12 int[][] mArr4; // 声明一个交叉数组,未初始化,未指定行数 13 14 foreach(var a in mArr2) 15 { 16 print(a.Length); //输出每一行中元素的个数 17 foreach(var b in a) 18 print(b); //输出每一行上的元素 19 } 20 }
对比下普通二维数组:
1 void Test2DArray() 2 { 3 int[,] arr1 = new int[3, 4]; //声明一个3x4的二维数组arr1 4 arr1[0,0] = 10; 5 arr1[0,1] = 20; 6 print(arr1.Length); //输出12 7 8 int[,] arr2 = new int[2, 3] { {1, 2, 3}, {4, 5, 6}}; //声明并初始化一个2x3的二维数组arr2 9 print(arr2.Length); //输出6 10 11 //遍历二维数组中的元素 12 for(int i = 0; i < 2; ++i) 13 for(int j = 0; j < 3; ++j) 14 print(arr2[i,j]); //输出1 2 3 4 5 6 15 }
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里可以指定顺序:
可以把脚本拖进去,然后上下交换位置,在上面的先执行。