Unity3D課程學習筆記

Unity3D課程學習筆記(一)
1.解釋遊戲對象(GameObjects)和資源(Assets)的區別與聯繫
官方文檔對Assets的解釋:An asset is representation of any item that can be used in your game or project. An asset may come from a file created outside of Unity, such as a 3D model, an audio file, an image, or any of the other types of file that Unity supports. There are also some asset types that can be created within Unity, such as an Animator Controller, an Audio Mixer or a Render Texture.

官方文檔對GameObjects的解釋:GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the real functionality.

解釋區別與聯繫:對象一般是一些資源的集合體,是資源整合的具體表現,而資源可以被多個對象使用。遊戲對象一般爲玩家,敵人,環境等,而資源可組成遊戲中所有的對象,一般包括聲音,腳本,材質等,資源可以被多個對象使用,資源作爲模版,可實例化遊戲中具體的對象。

2.下載幾個遊戲案例,分別總結資源、對象組織的結構(指資源的目錄組織結構與遊戲對象樹的層次結構)
遊戲:Beat-Plane:如下圖所示結構,資源中可以放置圖像、聲音、腳本等。

Unity3D課程學習筆記

3.編寫一個代碼,使用 debug 語句來驗證 MonoBehaviour 基本行爲或事件觸發的條件
測試代碼如下所示:
Unity3D課程學習筆記
則該代碼運行後在Console中顯示如下所示:
Unity3D課程學習筆記

MonoBehaviour 基本行爲或事件觸發的條件(按執行順序):

Awake() : 當前控制腳本實例被裝載的時候調用。一般用於初始化整個事例使用。(建議少用,此刻物體還未實例化出來,會影響程序的執行順序)

Start() : 當前控制腳本第一次執行Update之前調用。

Update() : 每幀都執行一次,是最常用的時間函數。

FixedUpdate() : 每固定幀繪製時執行一次,和Update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率底下的時候FixedUpdate的調用次數就會下降。FixedUpdate比較適用於物理引擎的計算,因爲是跟每幀渲染有關,而Update比較適合做控制。(放置遊戲基本物理行爲的代碼,在Update之後執行)

LateUpdate() : 在每幀執行完畢調用,他在所有Update結束後才調用,比較適合於命令腳本的執行。官網上例子是攝像機的跟隨,都是在所有Update操作完纔跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。

OnEnable() : 當對象變爲可用或激活狀態時此函數被調用,OnEnable不能用於協同程序。(物體啓動時被調用)

OnDisable() : 當對象變爲不可用或非激活狀態時此函數被調用。當物體銷燬時它被調用,並且可用於任意清理代碼。當腳本編譯完成之後被重新加載時,OnDisable將被調用,OnEnable在腳本被載入後調用。(物體被禁用時調用)

OnGUI() : 繪製GUI時候觸發。一般在這個函數裏繪製GUI菜單。(GUI顯示函數只能在OnGUI中調用)

4.查找腳本手冊,瞭解GameObject,Transfrom,Component對象
4.1.分別翻譯官方對三個對象的描述(Description)
GameObject :GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the real functionality.

翻譯:遊戲對象是Unity中表示遊戲角色,遊戲道具和遊戲場景的基本對象。他們自身無法完成許多功能,但是他們構成了那些給予他們實體功能的組件的容器。

Transform :The Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform.

翻譯: 轉換組件決定了遊戲場景中每個遊戲對象的位置,旋轉和縮放比例。每個遊戲對象都有轉換組件。

Component :Components are the nuts & bolts of objects and behaviors in a game. They are the functional pieces of every GameObject.

翻譯: 組件是遊戲中對象和行爲的細節。它是每個遊戲對象的功能部分。

4.2.描述下圖中 table 對象(實體)的屬性、table 的 Transform 的屬性、 table 的部件
Unity3D課程學習筆記

Table對象的屬性:Tag屬性用於區分遊戲中不同類型的對象,Tag可以理解爲一類元素的標記,可用GameObject.FindWithTag()來查詢對象。GameObject.FindWithTag()只返回一個對象,如果想獲取多個Tag爲某值的對象,應該用GameObject.FindGameObjectsWithTag()。第一個選擇框是activeSelf屬性。Layer屬性默認是Default。

Table的Transform屬性:Position、Rotation、Scale

Table的部件:Mesh Filter、Box Collider、Mesh Renderer

4.3.用UML圖描述三者的關係:
UML圖如下所示:
Unity3D課程學習筆記

5.整理相關學習資料,編寫簡單代碼驗證以下技術的實現:
查找對象:

通過名字查找:

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); }

6.資源預設(Prefabs)與 對象克隆 (clone)
6.1.預設(Prefabs)有什麼好處?
預設類似於一個模板,通過預設可以創建相同屬性的對象,這些對象和預設關聯。一旦預設發生改變,所有通過預設實例化的對象都會產生相應的變化(適合批量處理)。

6.2.預設與對象克隆 (clone or copy or Instantiate of Unity Object) 關係?
對象克隆不受克隆本體的影響,因此A對象克隆的對象B不會因爲A的改變而相應改變。

6.3.製作 table 預製,寫一段代碼將 table 預製資源實例化成遊戲對象
Unity3D課程學習筆記

7.嘗試解釋組合模式(Composite Pattern / 一種設計模式)。使用 BroadcastMessage()方法向子對象發送消息
組合模式允許用戶將對象組合成樹形結構來表現”部分-整體“的層次結構,使得客戶以一致的方式處理單個對象以及對象的組合。組合模式實現的最關鍵的地方是——簡單對象和複合對象必須實現相同的接口。這就是組合模式能夠將組合對象和簡單對象進行一致處理的原因。

子類對象方法:

void recallMessage() { print("Hello!"); }
父類對象方法:

void Start () { this.BroadcastMessage("recallMessage"); }

8.編程實踐,井字棋小遊戲
井字棋小遊戲其實只是一個2D遊戲,具體實現過程並不是很難,主要是要掌握GUI的一些API的使用
本次作業主要用到GUI的一些API,GUI是指Graphic User Interface,是圖形用戶接口,主要提供可視化界面方面的接口

具體代碼實現如下:
Unity3D課程學習筆記
Unity3D課程學習筆記
遊戲的UI如下所示:
Unity3D課程學習筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章