1. 程式人生 > >Unity5權威講解之菜鳥讀書筆記(二)

Unity5權威講解之菜鳥讀書筆記(二)

Unity5權威講解之菜鳥讀書筆記(二)


本章製作遊戲主人公角色,並學習遊戲物件和元件之間的關係,學會如何實現遊戲角色的移動邏輯,從而瞭解指令碼的使用方法。
6.將用於遊戲的3D模型放置於場景檢視有兩種方法,一是直接使用相應的3D模型,二是先建立空遊戲物件,然後將3D模型拖拽至新建的空遊戲物件下,使之成為其子物件。 如果是用於舞臺設計的靜態模型,一般會使用第一種方法,而如果是設計主人公角色或者敵對角色(NPC)則用第二種方法。 父物件和子物件Transform屬性記得設定為(0.0.0)。

7.獲取鍵盤組合鍵。 建立指令碼PlayerCtrl放置於Scripts資料夾中
 private float h = 0.0f;
  private float v = 0.0f;
  private Transform tr;          //必須先分配變數,之後才能使用需要訪問的元件。
    public float moveSpeed = 10.0f;
 public float rotSpeed = 100.0f;
void Start () {
  tr = GetComponent<Transform>(); //向指令碼初始部分分配Transform元件。
}
void Update () {
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");
        Debug.Log("H=" + h.ToString());
        Debug.Log("V=" + v.ToString());
 Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h); //計算前後左右移動方向向量
 tr.Rotate (Vector3 .up*Time .deltaTime *rotSpeed *Input .GetAxis ("Mouse X"));//以Y軸為基準 rotspeed為速度旋轉。
 tr.Translate(moveDir.normalized  * Time.deltaTime * moveSpeed , Space.Self);//Translate 函式    (移動方向*Time.deltaTime*位移值*速度,基礎座標)
//為了只獲取向量的方向,需要將其轉化為單位向量。此處使用Vector3.normalized屬性獲取單位向量值。(不過好像問題不大改不改無所謂)
}


提示:1.Input.GetAxis(string axisName)函式中要區分大小寫例如Input.GetAxis("Horizontal")。            2.Unity5中刪除了大部分獲取元件的縮略寫法,只留取了transform元件的縮寫。例如獲取rigidbody要寫成GetComponent<Rigidbody>()

8.座標系:區域性座標系和全域性座標系 Unity的場景檢視是無限的維空間,此三維空間中一一直不變的基準座標是全域性座標,反之, 區域性座標指各遊戲物件自己的座標。

因此,如果Translate函式的基準座標指定為Space Self,那麼遊戲物件將以區域性座標為基準進行移動; 若指定為Space.World,則 將以全域性座標為基準進行移動。
(圖一為區域性座標,圖二為全域性座標)


9.單位向量    向量是具有大小和方向的資料型別,Unity 中,每個方向軸上大小為1的向量稱為單位向量(正規
化向量,Normalized Vector) 此處可以將之理解為只表示方向的向量。
   Vector3 結構體是Unity 提供的在開發過程中用以表示三維空間座標和方向的資料型別。Unity 提
供瞭如圖表所示的各種單位向量的簡形式,可以輕鬆呼叫。
簡寫形式  
含義
Vector3.forward Vector3 (0,0,1)  
Vector3.back Vector3 (0,0,-1)
Vector3 left Vector3 (-1,0,0 )
Vector3.right Vector3 (1,0,0 )
Vector3.up Vector3 (0,1,0 )
Vector3 down Vector3 (0,-1,0 )
Vector3.one Vector3 (1,1,1 )
Vector3.zero Vector3 (0,0,0)

10.實現攝像機的追蹤
新建FollowCam於Scripts資料夾中。程式碼如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowCam : MonoBehaviour {
    public Transform targetTr;//要追蹤的物件變數。
    public float dist = 10.0f;
    public float height = 3.0f;//高度
    public float dampTrace = 20.0f;//實現平滑追蹤的變數

    //攝像機的Transform
    private Transform tr;
	// Use this for initialization
	void Start () {
        //分配給tr
        tr = GetComponent<Transform>();
	}

    // Update is called once per frame
           //使用lateupdata函式
    void LateUpdate () {
        tr.position = Vector3.Lerp(tr.position, targetTr.position - (targetTr.forward * dist) + (Vector3.up * height), Time.deltaTime * dampTrace);

        //時攝像機朝向遊戲物件。
        tr.LookAt(targetTr.position);
	}

}
使用LateUpdate函式是為了防止畫面抖動,在Update函式執行後才執行LateUpdate函式。