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