1. 程式人生 > >Unity3d學習之路-基礎概念

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。

    picture

    • 用 UML 圖描述 三者的關係(請使用 UMLet 14.1.1 stand-alone版本出圖)
      picture
  • 整理相關學習資料,編寫簡單程式碼驗證以下技術的實現:

    • 查詢物件
      • 通過名字查詢: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”));
  • 嘗試解釋組合模式(Composite Pattern / 一種設計模式)。使用 BroadcastMessage() 方法

    • 向子物件傳送訊息
      答:組合模式將物件組合成樹形結構來表現”部分-整體”的層次結構,可以用一致的方式處理單個物件以及物件的組合。組合模式實現的關鍵地方是——簡單物件和複合物件必須實現相同的介面,所以能夠將組合物件和簡單物件進行一致處理。

父物件:


public class NewBehaviourScript : MonoBehaviour {
    void Start () {
        this.BroadcastMessage("test");
    }
}

子物件:


public class NewBehaviourScript1 : MonoBehaviour {
    void test() {
        Debug.Log("Child!");
    }
}