1 [易]A和B同時掛了兩個腳本,生命周期分別由awake,onenable,start,那么這兩個物體的執(zhí)行順序是:(A的awake,A的onenable,B的awake
(A的awake,A的onenable,B的awake,B的onenable,A的start,B的start) |
點乘是一個float值,結(jié)果越大,兩個向量越相似,叉乘是一個vector,兩個向量的叉乘分別垂直于這兩個向量 |
沙河目錄的persistdatapath |
Diffuse = I * dot(L,N) |
通過單例模式可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源。單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。
|
Dictionary(字典)是使用 hash表來實現(xiàn)key和value之間的映射和存儲的。 Dictionary使用的解決沖突方法是拉鏈法,又稱鏈地址法。 字典的時間復(fù)雜度是O(1) |
a)棧是編譯期間就分配好的內(nèi)存空間,因此你的代碼中必須就棧的大小有明確的定義;堆是程序運行期間動態(tài)分配的內(nèi)存空間,你可以根據(jù)程序的運行情況確定要分配的堆內(nèi)存的大小 b)存放在棧中時要管存儲順序,保持著先進后出的原則,他是一片連續(xù)的內(nèi)存域,有系統(tǒng)自動分配和維護。而堆是無序的,他是一片不連續(xù)的內(nèi)存域,有用戶自己來控制和釋放,如果用戶自己不釋放的話,當(dāng)內(nèi)存達到一定的特定值時,通過垃圾回收器(GC)來回收。 棧中保存了代碼的執(zhí)行步驟,先進先出,每次使用要從棧頂取走,使用后立即回收空間,棧內(nèi)存不需要管理,不收GC管理 堆存放了各種對象的信息,不會在使用結(jié)束后被立刻回收,堆內(nèi)存需要GC管理 |
沒有,根據(jù)上次調(diào)用時處理的內(nèi)存占用決定 |
占用內(nèi)存 |
精靈打包和圖集,UI布局進行動靜分離,將動態(tài)變化中的UI組件單獨分配到一個Canvas中 |
static void Sort(int[] arr) { for (int i = 0; i < arr.Length-1; i++) { for (int j = 0; j < arr.Length-1-i; j++) { if (arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } |
static void Sort(int[] arr) { for (int i = 0; i < arr.Length-1; i++) { for (int j = 0; j < arr.Length-1-i; j++) { if (arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } |
利用余弦定理 cosA=(b^2+c^2-a^2)/2bc 角A = Math.Acos(cosA)*180/Math.PI cosB=(c^2+a^2-b^2)/2ca 角B = Math.Acos(cosB)*180/Math.PI cosC=(a^2+b^2-c^2)/2ab 角C = Math.Acos(cosC)*180/Math.PI |
//隨機產(chǎn)生一個范圍內(nèi)的字符 static char GetChar(char start,char end) { Random random = new Random(); return (char)random.Next(start,end); } /// /// 隨機插入集合列表中 /// /// /// /// /// static void Insert(List { if (repeat) { list.Insert(index, item); } else { if (!list.Contains( item)) { list.Insert(index, item); } } } /// /// 生成目標(biāo)字符串 /// ///字符串長度 ///是否包含數(shù)字 ///是否包含大寫字母 ///是否包含小寫字母 /// /// static string Test01(int len, bool isContainNumber, bool isContainUpperLetter, bool IsContainLowerLetter,bool isRepeat) { List Random random = new Random(); if (isContainNumber) { charList.Add(GetChar('0', '9')); } if (isContainUpperLetter) { Insert(charList, random.Next(0, charList.Count), GetChar('A', 'Z'), isRepeat); } if (IsContainLowerLetter) { Insert(charList, random.Next(0, charList.Count), GetChar('a', 'z'), isRepeat); } while (charList.Count< len) { int index = random.Next(0,charList.Count); char tempChar = (char)random.Next('0', 'z'); if (char.IsNumber(tempChar) == isContainNumber && isContainNumber) { Insert(charList, index, tempChar, isRepeat); } else if (char.IsLower(tempChar) == isContainNumber && isContainNumber) { Insert(charList, index, tempChar, isRepeat); } else if (char.IsUpper(tempChar) == isContainNumber && isContainNumber) { Insert(charList, index, tempChar, isRepeat); } } return new string(charList.ToArray()); } |
a)使用ref型參數(shù)時,傳入的參數(shù)必須先被初始化。對out而言,必須在方法中對其完成初始化。 b)使用ref和out時,在方法的參數(shù)和執(zhí)行方法時,都要加Ref或Out關(guān)鍵字。以滿足匹配。 c)out適合用在需要retrun多個返回值的地方,而ref則用在需要被調(diào)用的方法修改調(diào)用者的引用的時候。 |
GetA = 11,GetA = 11 |
Awake--OnEnable--Start--FixedUpdate--Update--LateUpdate--OnGUI--OnDisable---OnDestroy--OnApplication |
1.通過Resources模塊,調(diào)用它的load函數(shù):可以直接load并返回某個類型的Object,前提是要把這個資源放在Resource命名的文件夾下,Unity不關(guān)有沒有場景引用,都會將其全部打入到安裝包中。 2.通過bundle的形式:即將資源打成 asset bundle 放在服務(wù)器或本地磁盤,然后使用WWW模塊get 下來,然后從這個bundle中l(wèi)oad某個object。 3.通過AssetDatabase.loadasset :這種方式只在editor范圍內(nèi)有效,游戲運行時沒有這個函數(shù),它通常是在開發(fā)中調(diào)試用的 |
協(xié)同程序(coroutine)與多線程情況下的線程比較類似:有自己的堆棧,自己的局部變量,有自己的指令指針(IP,instruction pointer),但與其它協(xié)同程序共享全局變量等很多信息。 協(xié)程(協(xié)同程序): 同一時間只能執(zhí)行某個協(xié)程。開辟多個協(xié)程開銷不大。協(xié)程適合對某任務(wù)進行分時處理。 線程: 同一時間可以同時執(zhí)行多個線程。開辟多條線程開銷很大。線程適合多任務(wù)同時處理。 1.協(xié)程,即協(xié)作式程序,其思想是,一系列互相依賴的協(xié)程間依次使用CPU,每次只有一個協(xié)程工作,而其他協(xié)程處于休眠狀態(tài)。協(xié)程實際上是在一個線程中,只不過每個協(xié)程對CUP進行分時,協(xié)程可以訪問和使用unity的所有方法和component 2.線程,多線程是阻塞式的,每個IO都必須開啟一個新的線程,但是對于多CPU的系統(tǒng)應(yīng)該使用thread,尤其是有大量數(shù)據(jù)運算的時刻,但是IO密集型就不適合;而且thread中不能操作unity的很多方法和component 線程和協(xié)同程序的主要不同在于:在多處理器情況下,從概念上來講多線程程序同時運行多個線程;而協(xié)同程序是通過協(xié)作來完成,在任一指定時刻只有一個協(xié)同程序在運行,并且這個正在運行的協(xié)同程序只在必要時才會被掛起。 在主線程運行的同時開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行,協(xié)程很像多線程,但是不是多線程,Unity的協(xié)程實在每幀結(jié)束之后去檢測yield的條件是否滿足。 |
pairs可以遍歷表中所有的key,并且除了迭代器本身以及遍歷表本身還可以返回nil; ipairs則不能返回nil,只能返回數(shù)字0,如果遇到nil則退出。它只能遍歷到表中出現(xiàn)的第一個不是整數(shù)的key |