unity學習筆記(一)

StaDark發表於2024-09-01

元件的概念

元件:一個或多個功能的容器,類似模組,插上去就有這個功能,不查沒有

存在意義:

  • 如果太依賴繼承,繼承樹將會特別複雜
  • 元件化設計思想有利於維護擴充

unity內任何遊戲物體必須有Transform元件

unity中大多數情況下,我們寫的c#指令碼就是一個元件


從程式碼角度認識GameObject

任何元件身上都有一個gameObject,代表它所在的GameObject(宿主)

主要屬性

  • name:遊戲物體的名稱
  • tag:遊戲物體的標籤
  • layer:遊戲物體的層分類
Debug.Log(gameObject.name);//列印出GameObject的名字
gameObject.name = "Game Object";//修改GameObject的名字
Debug.Log(gameObject.name);//列印出GameObject的名字

if (gameObject.tag == "Player")
{
	Debug.Log("This is a player object");//判斷GameObject的tag是否為Player
}

主要行為

  • SetActive:是否顯示
  • AddComponent:新增元件
  • GetComponents:獲取元件
  • GetComponents:獲取多個元件(允許一個元件重複新增,但是一般不會)
  • GetComponentInChildren:從子物體身上查詢元件
  • GetComponentInParent:從父物體身上查詢元件
  • <T>:泛型,後續細說,目前簡單理解為“確定一個型別”

銷燬元件的方式

Destory(gameObject.GetComponent<XXXXController>());

Transform元件基本資訊

GameObject有個屬性就是transfrom,代表它所在GameObjectTransform元件

主要屬性

  • position:座標
  • rotation:旋轉 (四元數格式)
  • eulerAngles:旋轉(尤拉角模式)
  • localScale:縮放
  • localPositionlocalRotationlocalEulerAngels:是相對父物體的座標和旋轉
  • parent:父物體的transform
  • childCount:子物體的數量
  • root:自身的根節點(父的父的父到最上層)

主要行為

  • GetChild:獲取第X個子物體
  • SetParent:設定自身為某個遊戲物體的子物體
  • Find:查詢子物體,引數是路徑,填寫方式類似資料夾"A/B/C"

座標和Vector結構體

unity中2D和3D沒有本質上的區別,unity中的2D場景就是Z軸值為0的3D場景

世界座標系:相對世界的座標

區域性座標系:相對父物體的座標

Translate維護父子結構

刪除一個GameObject

  • Destroy:銷燬物體,但不會立即銷燬,而是在Update執行後執行銷燬操作
  • DestroyImmediate:立即銷燬物體,銷燬完物體才會執行下一行程式碼

父子結構相關的屬性與函式

  • parent:父物體的transform
  • childCount:子物體的數量
  • root:自身的根節點(父的父的父到最上層)
  • GetChild:獲取第X個子物體
  • SetParent:設定自身為某個遊戲物體的子物體

元件的生命週期

如字面意思,生命週期就是生老病死的一個輪迴。類似地,在unity中指的是一個元件從建立到銷燬的所有階段,這些階段肯定要做一些事情,這些事情就是生命週期函式

Tips:官方一般稱為“事件函式”

關鍵生命週期函式

  • Awake(針對自身):始終在任何Start函式之前GameObject建立後呼叫此函式。(如果遊戲物件在啟動期間處於非活動狀態,則在啟用之後才會呼叫Awake
  • OnEanble(針對自身):在啟用物件後立即呼叫此函式
  • Start(針對自身):僅當啟用指令碼例項後,才會在第一次幀更新之前呼叫Start
  • Update(針對自身):每幀呼叫一次 Update。這是用於幀更新的主要函式
  • LateUpdate(針對自身):在LateUpdate完成後執行一次
  • OnDisable(針對自身):被禁用或處於非活動狀態時,呼叫此函式
  • OnDestroy(針對自身):物件存在的最後一幀完成所有幀更新之後,呼叫此函式(可能因為Destroy函式或在場景關閉時銷燬該物件)

//TODO:需要補充一些

幀的深度瞭解

遊戲、影片的原理就是不停的重新整理畫面,那麼這個重新整理一定存在頻率,這就是幀率(FPS),比如60FPS就是每秒重新整理60次畫面

假設遊戲穩定在60PFS的狀態下,那麼Update就是1/60秒執行一次,也就是每秒執行60次

相關文章