Unity3d學習之路-基礎概念
Unity3d-基礎概念
1、簡答題
解釋遊戲物件(GameObjects) 和 資源(Assets)的區別與聯絡。
答:遊戲物件是一種容器。它們是空盒,能夠容納元件。根據要建立的物件型別,可以新增不同的元件組合到遊戲物件中。
資源可以新增到遊戲物件上,例如材質和動畫運用到遊戲物件上,有些資源作為模板,可例項化成遊戲中具體的物件。下載幾個遊戲案例,分別總結資源、物件組織的結構(指資源的目錄組織結構與遊戲物件樹的層次結構)
答:每個Unity的專案包含一個資原始檔夾。此資料夾的內容呈現在專案檢視。這裡存放著遊戲的所有資源,在資原始檔夾中,通常有物件、材質、場景、聲音、預設、貼圖、指令碼、動作,在這些資料夾下可以繼續進行劃分。
遊戲物件樹層次檢視包含了每一個當前場景的所有遊戲物件。其中一些是資原始檔的例項,如3D模型和其他預製物體的例項。可以在層次結構檢視中選擇物件或者生成物件。當在場景中增加或者刪除物件,層次結構檢視中相應的物件則會出現或消失。想讓一個遊戲物件成為另一個的子物件,只需在層次檢視中把它拖到另一個上即可。一個子物件將繼承其父物件的移動和旋轉屬性。編寫一個程式碼,使用 debug 語句來驗證 MonoBehaviour 基本行為或事件觸發的條件
- 基本行為包括 Awake() Start() Update() FixedUpdate() LateUpdate()
- 常用事件包括 OnGUI() OnDisable() OnEnable()
public class NewBehaviourScript : MonoBehaviour { void Awake() { Debug.Log ("Awake"); } void Start () { Debug.Log ("Start"); } void Update () { Debug.Log ("Update"); } void FixedUpdate() { Debug.Log ("FixedUpdate"); } void LateUpdate() { Debug.Log ("LateUpdate"); } void OnGUI() { Debug.Log ("OnGUI"); } void OnDisable() { Debug.Log ("OnDisable"); } void OnEnable() { Debug.Log ("OnEnable"); } }
查詢指令碼手冊,瞭解 GameObject,Transform,Component 物件
分別翻譯官方對三個物件的描述(Description)
答:GameObject是代表人物、道具和風景的基本物件在Unity中。它們本身並沒有實現多少功能,但是它們充當Component的容器,這些Component實現了真正的功能。
Transform決定場景中每個物件的位置、旋轉和縮放比例。每個GameObject都有一個Transform。
一個GameObject包含一個Component,可以通過 Inspector 來檢視遊戲物件的元件描述下圖中 table 物件(實體)的屬性、table 的 Transform 的屬性、 table 的部件
- 本題目要求是把視覺化圖形程式設計介面與 Unity API 對應起來,當你在 Inspector 面板上每一個內容,應該知道對應 API。
- 例如:table 的物件是 GameObject,第一個選擇框是 activeSelf 屬性。
答:table 的物件是 GameObject,第一個選擇框是 activeSelf,table是name屬性 屬性,旁邊的Static的選擇框是isStatic屬性,Tag對應tag屬性,Layer對應layer屬性。
Transform屬性有position屬性對應圖中的Position,rotation屬性對應Rotation,要修改Scale使用localScale屬性。
table 的部件有Box Collider,Mesh Renderer以及Default-Material。
- 用 UML 圖描述 三者的關係(請使用 UMLet 14.1.1 stand-alone版本出圖)
整理相關學習資料,編寫簡單程式碼驗證以下技術的實現:
- 查詢物件
- 通過名字查詢: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) {};
- 清除所有子物件:foreach (Transform child in transform) { Destroy(child.gameObject);}
- 查詢物件
資源預設(Prefabs)與 物件克隆 (clone)
- 預設(Prefabs)有什麼好處?
答:預設體完整儲存了物件的元件和屬性,相當於模板,方便重複使用。 - 預設與物件克隆 (clone or copy or Instantiate of Unity Object) 關係?
答:預設與物件克隆不同的是,預設與例項化的物件有關聯,比如預設有元件變化,那麼例項化對也會有元件變化,而物件克隆本體和克隆出的物件是不相影響的。 - 製作 table 預製,寫一段程式碼將 table 預製資源例項化成遊戲物件
答:將table預製體放到 Resource 資料夾下
使用GameObject.Instantiate(Resource.Load(“table”));或者
GameObject instance = Instantiate(Resources.Load(“table”));
- 預設(Prefabs)有什麼好處?
嘗試解釋組合模式(Composite Pattern / 一種設計模式)。使用 BroadcastMessage() 方法
- 向子物件傳送訊息
答:組合模式將物件組合成樹形結構來表現”部分-整體”的層次結構,可以用一致的方式處理單個物件以及物件的組合。組合模式實現的關鍵地方是——簡單物件和複合物件必須實現相同的介面,所以能夠將組合物件和簡單物件進行一致處理。
- 向子物件傳送訊息
父物件:
public class NewBehaviourScript : MonoBehaviour {
void Start () {
this.BroadcastMessage("test");
}
}
子物件:
public class NewBehaviourScript1 : MonoBehaviour {
void test() {
Debug.Log("Child!");
}
}