1. 程式人生 > >Unity3D-基礎小知識(一)

Unity3D-基礎小知識(一)

解釋物件與資源的區別於聯絡,根據AngryBots,以及其他官方案例,分別總結資源和物件組織的規則。
資源可以被多個物件使用,資源整合的具體表現是直接出現在遊戲場景的物件。有些資源作為模板,可例項化成遊戲中具體的物件。通過案例,我們可以知道,資源和物件通常被劃分為各種種類易於管理。在資原始檔夾,通常有物件、材質、場景、聲音、預設、貼圖、指令碼、動作,在這些資料夾下可以繼續進行劃分。而物件則一般有玩家、敵人、環境、攝像機和音樂等虛擬父類,這些父節點本身沒有實體,但它們的子類真正包含了遊戲中會出現的物件。

編寫簡單程式程式碼,逐一驗證 MonoBehaviour 基本行為觸發的條件。
public class NewBehaviourScript : MonoBehaviour {
void Awake() {
print(“onAwake!”);
}
void Start() {
print(“onStart!”);
}
void Update() {
print(“onUpdate!”);
}
void OnGUI() {
print(“onGUI!”);
}
void FixedUpdate() {
print(“onFixedUpdate!”);
}
void LateUpdate() {
print(“onLateUpdate!”);
}
void Reset() {
print(“onReset!”);
}
void OnDisable() {
print(“onDisable!”);
}
void OnDestroy() {
print(“onDestroy!”);
}
}
通過官方參考手冊,查詢 GameObject,Transform,Component 物件,簡單解釋三者之間的關係。
GameObject包含Component,Transform屬於Component的一種。GameObject必定包含一個Transform元件,也可能包含其它Component。
整理官方和其他學習材料,介紹如何用程式(程式碼)管理一個場景的遊戲物件樹林。編寫簡單程式碼驗證以下技術的實現:
查詢物件
通過名字查詢:
public static GameObject Find(string name)
通過標籤查詢:
單個物件:public static GameObject FindWithTag(string tag)
多個物件:public static GameObject[] FindGameObjectsWithTag(string tag)
新增子物件
public static GameObect CreatePrimitive(PrimitiveTypetype)
遍歷物件樹
foreach (Transform child in transform) {
Debug.Log(child.gameObject.name);
}

清除所有子物件
foreach (Transform child in transform) {
Destroy(child.gameObject);
}

預設有什麼好處?與物件克隆 (clone or copy or Instantiate of Unity Object) 關係?
預設類似於一個模板,通過預設可以建立相同屬性的物件,這些物件和預設關聯。,物件克隆也可以建立相同屬性的物件,但是物件克隆與本體無關聯。即對於預設,一旦預設發生改變,所有通過預設例項化的物件都會產生相應的變化,而物件克隆不受克隆本體的影響,因此A物件克隆的物件B不會因為A的改變而相應改變。預設就有適於批量處理的好處。
解釋組合模式。並編寫驗證程式,向組合物件中子物件 cast 訊息, 驗證組合模式的優點。
組合模式原理:將物件組合成樹形結構來表現”部分-整體“的層次結構。組合模式使得使用者以一致的方式處理單個物件以及組合物件。組合模式實現的關鍵——簡單物件和複合物件必須實現相同的介面。
my_obj:
void sayHello() {
print(“Hello!”);
}
GameObject:
void Start () {
this.BroadcastMessage(“sayHello”);
}
層次結構:
GameObject
|—-
my_obj
執行結果:
Hello!