1. 程式人生 > 其它 >閱讀國外Coder教程時的筆記,Object Management篇(五)

閱讀國外Coder教程時的筆記,Object Management篇(五)

技術標籤:Unity

原文地址:https://catlikecoding.com/unity/tutorials/object-management/multiple-scenes/
閱讀國外Coder教程時的筆記,Object Management篇(一)
閱讀國外Coder教程時的筆記,Object Management篇(二)
閱讀國外Coder教程時的筆記,Object Management篇(三)
閱讀國外Coder教程時的筆記,Object Management篇(四)

1.Random下的幾個方法
Random.Range(a,b)
隨機在範圍內獲得值,值的型別由前面的值決定。比如int a.Range.Range的話,隨機出來的值就是int型別;相對的,float的話隨機出來就是float型別的。這裡注意的是隨機出來的數會出現a,但不會出去b。教程裡我發現Vector3等向量型別的也是適應這個方法的,當然隨機出來的是向量型別的,並且可以用下面兩個方法。

Random.insideUnitSphere
Random.onUnitSphere
前者是獲得單位圓內的某個點,後者則是獲得單位圓表面的點。

2.有關Gizmos
你可以把它理解為輔助開發設計的一個工具(不支援在釋出後的遊戲中顯示),可以在編輯模式下繪製輔助圖形,在遊戲模式下也是可以開啟的。
在這裡插入圖片描述
我們可以建立自定義方法onDrawGizmos去使用它。跟碰撞體的使用方法很相似,我們不用在語句中呼叫它,指令碼啟用後方法自動在編輯模式下生效。還要一種是onDrawGizmosSelected,意思就是隻有你在Hierarchy面板中選中物體才能看到繪製的Gizmos。
Gizmos下的幾個方法:

Gizmos.DrawWireSphere 繪製一個圓,需要傳入圓點向量和半徑值
Gizmos.DrawLine 繪製一條線,需要傳入有一個代表起點和終點的向量
Gizmos.color 設定Gizmos圖形的顏色,不設定則為白色
Gizmos.matrix 我的理解是設定Gizmos繪製時座標的參考父物體,我們可以傳入transform.localToWorldMatrix,設定圖形繪製參考座標以xx物體為參考。
3.不同場景之間指令碼的呼叫
我們在一個指令碼中引用另一個指令碼有很多中方法,可以用FindObjectTypeOf給事先定義好的該指令碼變數傳值。或者也可以直接把變數設定成public,然後可以在Inspector面板中,通過把帶有目標指令碼的物體拖入以達到傳入值的目的。這樣即方便又可以少寫一句程式碼。但是如果目標指令碼的物體是別的場景的呢?答案是我們無法拖拽進去,且之前拖拽進去賦的值也會丟失,unity也會有錯誤提示。
在這裡插入圖片描述
這個時候可以通過關鍵字static設定全域性變數,建立指令碼與指令碼之間的聯絡。
(這裡以SpawnZone和CreatingGame這兩個指令碼為例)

 public SpawnZone spawnZoneOfLevel { get; set; }
 public static CreatingGame Instance { get; private set; }
 private void OnEnable()
 {
     Instance = this;
 }
    //這裡用OnEnable而不是Awake的理由是,場景切換其實就是把指令碼給disable了。

通過以上設定,越過場景也可以通過CreatingGame.Instance.spawnZoneofLevel的形式給該變數賦值。(這裡我發現加了{get;set;}後,即使是public的變數也無法在Inspector面板賦值,即只能通過指令碼內程式碼賦值)
4.Vector型別的值,其實也是一個數組
如果把一個Vector3型別的值a寫成a[i],即代表這個向量在某個軸上的值,i可以是0,1,2,分別代表x,y,z軸。

 int axis = Random.Range(0, 3);
 p[axis] = p[axis] < 0f ? -0.5f : 0.5f;
 //這裡程式碼的意思是,向量p各個軸上的值根據正負,會變為0.5f或-0.5f。

以上,希望可以幫到大家的學習。