1. 程式人生 > >Unity5 Roll A Ball專案筆記

Unity5 Roll A Ball專案筆記

Scenes

Unity開發的遊戲是由一個個場景組成的。

Prefabs預製件

預製件的相當於一個模板,利用Prefab創造的物件,可以進行統一的配置和編碼。

GameObject

GameObject是Unity中所以實體的基類。同樣的,該型別可以向任何子類目標進行轉換。

MonoBehaviour

所有使用Unity指令碼(C#)的類,都需要顯示的繼承這個類。該型別有幾個關於生命週期的函式:

  • Awake():該函式在載入指令碼時進行呼叫。僅僅會呼叫一次,而且是在所用的Object都初始化完畢後進行呼叫的,所以可以使用該函式呼叫所有的物件。
  • Start():函式在指令碼被允許使用的第一幀開始呼叫。它和Awake
    類似,不過前者是直接在載入指令碼的時候進行初始化,而該函式是在指令碼被允許後進行初始化。
  • Update():如果一個MonoBehaviour被允許,該函式在每一幀進行呼叫,用於重新整理。
  • FixedUpdate():固定幀數進行呼叫,如果使用了RigidBody進行物理模擬,那麼需要重新整理的內容因該放在該函式中。
  • LateUpdate():每一幀進行更新,不過是在其他所有更新函式呼叫完成之後,最後進行更新,一般用於跟隨攝像機的操作

transform

每一個Unity的實體都有一個transform物件,用於儲存、操作位置、旋轉和尺寸等。

Collider

用於碰撞檢測的,每個實體的外側的那一層包圍線就是,有一些子類,比如:BoxCollider, SphereCollider, CapsuleCollider, MeshCollider, PhysicMaterial, Rigidbody.。用於檢測碰撞等。如果需要檢測碰撞等的事件,需要在isTrigger

設定為有效。

RigidBody

如果一個物件添加了該元件,那麼該物件的控制權交給物理引擎,並自動新增一些物理屬性。使用了RigiBody的物件,需要使用FixedUpdate函式進行更新,因為物理引引擎是根據時間步長計算的,Update是根據時間計算的。RigidBody有時會有慢動作現象,因為物理引擎假設的距離是現時世界的一米,如果物體非常大,而在實際中假設的很小,就會出現這種現象。所以要控制與現實中的比例。

獲取一個物件的RigidBody的方式:

public Rigidbody rb;
rb = GetComponent<Rigidbody>();
  • AddFore()
    :對Object施加外力。
  • Destory():移除一個物件。
  • isKinematic():用於控制RigidBody是否受物理影響。如果不受影響,那麼一般的物理操作,比如碰撞等,不會影響該物體。
  • OnTriggerEnter(Collider):用於檢測Collider的碰撞,如果是有效的Collider過來,那麼會觸發這個函式,傳入的引數是觸發該函式的Collider物件,獲取碰撞的一般方式:
    private void OnTriggerEnter(Collider other) {
        if (other.gameObject.CompareTag("Pick Up")) {
            other.gameObject.SetActive(false); // 碰撞後無效了
        }
    }
    
    需要用到tag進行標記

Vector3

表示一個3維向量和一個點。

獲取輸入

float moveVertical = Input.GetAxis("Vertical");
float moveHorizontal = Input.GetAxis("Horizontal");

關於Unity編輯器中的槽

指令碼類的public物件直接顯示在外部,需要拖入需要關聯的物件。