Unity5權威講解之菜鳥讀書筆記(二)
阿新 • • 發佈:2018-12-09
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函式。