您好,登錄后才能下訂單哦!
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:如下圖所示結構,資源中可以放置圖像、聲音、腳本等。
3.編寫一個代碼,使用 debug 語句來驗證 MonoBehaviour 基本行為或事件觸發的條件
測試代碼如下所示:
則該代碼運行后在Console中顯示如下所示:
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 的部件
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圖如下所示:
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 預制資源實例化成游戲對象
7.嘗試解釋組合模式(Composite Pattern / 一種設計模式)。使用 BroadcastMessage()方法向子對象發送消息
組合模式允許用戶將對象組合成樹形結構來表現”部分-整體“的層次結構,使得客戶以一致的方式處理單個對象以及對象的組合。組合模式實現的最關鍵的地方是——簡單對象和復合對象必須實現相同的接口。這就是組合模式能夠將組合對象和簡單對象進行一致處理的原因。
子類對象方法:
void recallMessage() { print("Hello!"); }
父類對象方法:
void Start () { this.BroadcastMessage("recallMessage"); }
8.編程實踐,井字棋小游戲
井字棋小游戲其實只是一個2D游戲,具體實現過程并不是很難,主要是要掌握GUI的一些API的使用
本次作業主要用到GUI的一些API,GUI是指Graphic User Interface,是圖形用戶接口,主要提供可視化界面方面的接口
具體代碼實現如下:
游戲的UI如下所示:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。