一、解釋對象與資源的區別與聯繫,根據官方案例,分別總結資源和對象組織的規則/規律
資源指的是遊戲中那些直接可見的、對用戶展現出的元素,包括圖片、音樂、視頻、人物、字體。
對象指的是數據?資源的載體?
資源可以被很多對象複用,很多資源構成遊戲的場景。
資源的組織:首先按照大類分爲音頻、視頻、字體、圖片等,再往下可能是按照場景劃分。對象的組織:可以按照玩家、環境、攝像機、音樂等進行分類,這些父類本身沒有實體,只是一個邏輯的關係,他們的子類(可以理解爲葉結點,構成遊戲的主題)
二、編寫簡單程序代碼,逐一驗證 MonoBehaviour 基本行爲觸發的條件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CamBeha : MonoBehaviour {
void Awake() {
Debug.Log ("onAwake");
}
void Start() {
Debug.Log ("onStart");
}
void Update() {
Debug.Log ("onUpdate");
}
void OnGUI() {
Debug.Log ("onGUI");
}
void Reset() {
Debug.Log ("onReset");
}
void onDisable() {
Debug.Log ("onDisable");
}
void onDestroy() {
Debug.Log ("onDestroy");
}
}
Awake觸發條件:實例正在載入的時候
Start觸發條件:腳本可以被執行的第一幀,所有update沒有執行之前
update觸發條件:腳本可以被執行後,執行完start的每一幀
OnGUI觸發條件:每次GUI被渲染的時候
Reset觸發條件:在inspectors視圖中被用戶點擊的時候
onDisable觸發條件:當這個行爲被disable的時候(雖然我不知道什麼時候會被disable)
onDestroy觸發條件:當這個對象銷燬的時候(被Destory方法銷燬)
三、通過官方參考手冊,查找 GameObject,Transform,Component 對象,簡單解釋三者之間的關係。(使用UMLet 畫教程上圖)
GameObject是所有遊戲對象的基類(base class),component對象是所有組件的基類(base class),這類對象都attack(不會翻譯,只可意會)到gameobject上,transform是component的一個超類(繼承自component),每個GameObject都有一個Component。
四、整理官方和其他學習材料,介紹如何用程序(代碼)管理一個場景的遊戲對象樹林。編寫簡單代碼驗證以下技術的實現:
查找對象
public static GameObject find(string name) // 根據對象名查找
public static GameObject FindWithTag(string tag) // 根據標籤查找對象
添加對象
public static GameObject CreatePrimitive(PrimitiveType type);
public static Object Instantiate(Object original); // 通過克隆添加子對象
遍歷對象樹:
void travel(GameObject father) {
foreach (Transform child in transform) {
travel(child);
// do something here
}
}
清除所有子對象:
public static void Destroy(Object obj, float t = 0.0F);
void deleteAllChild() {
foreach (Transform child in transform) {
Destory(child); // 因爲是object這個對象的方法,所有對象的基類
}
}
六、解釋組合模式
組合模式類似於數據結構中的樹的結構,有一個主對象,其他作爲組件。在我的理解看來,他就是一種分級的模式。組合模式實現的關鍵就是簡單和複合對象要實現相同接口,使用戶能夠像操作簡單對象一樣操作複合對象。
以下代碼爲向子對象cast消息示例:
public class CamBeha : MonoBehaviour {
// Use this for initialization
void Start () {
this.BroadcastMessage ("sayHello");
}
}
public class myBeh : MonoBehaviour {
void sayHello() {
Debug.Log ("hello world");
}
}