1. 程式人生 > >Unity官方指令碼(一)

Unity官方指令碼(一)

一、 時間週期

  1. Awake()和Start()會在指令碼載入後自動呼叫
  2. Awake()先被呼叫,即使指令碼未被啟用。此方法最好用來設定指令碼之間的引用和初始化
  3. Start()在Awake()之後呼叫,第一次Update()呼叫之前,但必須是指令碼已被啟用的情況下。
  4. Update()每一幀都會被呼叫,大部分需要週期性改變的內容都放在這個函式裡。非物理物件的移動、計時器、輸入檢測、通常都放在Update()中。Update()並不根據正常的時間軸呼叫,如果某一幀花費的時間大於下一幀,那麼每幀呼叫的間隔將不同。
  5. FixedUpdate()根據正常的時間軸呼叫且每次呼叫間隔是相同的,呼叫FixedUpdate()後,會進行需要的物理計算。比如有剛體的物理物件,需要放在FixedUpdate()中。FixedUpdate()通常用於移動物理物件。

二、 空間向量

  1. 向量運算:向量是兩點之間的一條線。
  2. 2D向量可以從原點(0,0)指向平面中任意一點
    這裡寫圖片描述
  3. 3D與2D
    這裡寫圖片描述
  4. Unity遵循左手座標系法則。
    這裡寫圖片描述

三、 空間向量計算

  1. 3D計算兩點之間的距離:Unity中Vector3.Magnitude()會自動計算向量大小
    這裡寫圖片描述
  2. 3D向量有兩個常用函式,點積(通過兩個向量計算出一個標量,是一個單一值)和叉積
  3. 點積:通過點積可以瞭解兩個向量之間的關係。如果兩個向量的點積為0,那麼他們相互垂直。Unity中可以呼叫Vector3.Dot()自動計算點積
    這裡寫圖片描述
  4. 叉積的結果不是一個單一標量值,而是另一個向量,這個向量垂直於之前的兩個向量
    這裡寫圖片描述
  5. 當你開發一個模擬飛行遊戲時,或許會用到點積,你需要計算飛機的上向量與前向量的點積,如果兩個向量相互垂直,也就是點積為0,那麼飛機的阻力最小
    這裡寫圖片描述

    如果點積增大為正值,表示飛機的爬升,可以增大阻力
    這裡寫圖片描述
  6. Unity中呼叫Vector3.Cross()自動計算叉積。叉積在遊戲中可以用於判斷扭矩,從而轉動坦克炮臺,首先獲取炮臺當前朝向向量,和炮臺應朝向的向量,通過他們的叉積可以計算出炮臺的扭矩
    這裡寫圖片描述

四、 時間差Time.timeDelta

  1. timeDelta表示兩個值之間的差。Time類中的deltaTime屬性表示Update()或fixedUpdate()每次呼叫的間隔,這可以讓值平滑變化,可用於平滑移動或其他增量的計算。
    2.程式碼:
public class UsingDeltaTime : MonoBehavior
{
    public
float speed = 8f; public float countdown = 3.0f; void Update() { countdown -= Time.deltaTime; if(countdown <= 0.0f) light.enabled = true; if(Input.GetKey(KeyCode.RightArrow)) { //以每秒移動多少 transform.position += new Vector3(speed * Time.deltaTime,0.0f,0.0f); } } }

五、 GameObject遊戲物件以及相關元件和函式方法

  1. 設定啟動或關閉物件:
    GameObject.SetActive(true/false);
  2. 檢測物件自身和在“Hierarchy”中是否被啟用:
    GameObject.activeSelf;
    GameObject.activeInHierarchy;
  3. TranslateRotate是兩個常用的改變物件位置和旋轉的函式,使用的座標是自身座標
    transform.Translate(new Vector3(0,0,1) * Time.deltaTime);//每秒單位沿著z軸移動
    transform.Rotate(Vector3.forward * turnSpeed * Time.deltaTime);//每秒單位沿著z軸移動
  4. 如果你要移動帶有碰撞器的物件,某些需要由物理互動的物件時,就不要使用TranslateRotate,而是要使用專門移動物理物件的函式,除非你的剛體勾選了“Is Kinematic”選項。
  5. Destroy()可以銷燬物件和元件:Destroy(gameOject);。Destroy()的第二個引數(可選):用於設定銷燬的額延遲時間
    Destroy(GetComponent<MeshRenderer>());//銷燬渲染元件
  6. LookAt()可以讓物件的正前方,朝向設定的座標方向。
public Transform target;
void Update()
{
    transform.LookAt(target);
}

六、 線性插值Lerp

這裡寫圖片描述
這裡寫圖片描述