三、Unity3D中的Vector3、Transform和Time

1、Vector3

首先聲明:Unity中點和向量都用Vector3表示!

再來看其是如何定義的:

這裏寫圖片描述

由上圖可知Vector3是個struct(結構體),有 x , y , z 3個座標!

Vector3“.”出的常見東西

  • Vector3.forward:(0, 0, 1)
  • Vector3.back:(0, 0, -1)
  • Vector3.up:(0, 1, 0)
  • Vector3.down:(0, -1, 0)
  • Vector3.right:(1, 0, 0)
  • Vector3.left:(-1, 0, 0)

兩點間距離

float distance = Vector3.Distance( point1, point2 );

單位向量(Vector3對象.normalize()與Vector3.Normalize()的區別)

void Start(){
    Vector3 v = new Vector3(4,5,6);
    Vector3 r;
    r = Vector3.Normalize(v);//將v向量的單位向量賦給向量r(v本身沒有變)
    Debug.Log("v"+ v);
    v.Normalize();//將v向量本身單位化
    Debug.Log("v"+ v);
    Debug.Log("r"+ r);
    }

打印如下

輸出

線性插值
Vector3.Lerp(Vector3 from , Vector3 to , float t)
會返回一個當前位置的Vector3
from : 起點
to : 終點
t : 百分比
例如:
t=0.1時表示 每幀會從起點向終點移動當前相差距離的10%(即從快到慢的速度移動)
注:線性插值會使得移動更平滑

2、Transform

Transform與transform的區別:

Transform泛指所有遊戲對象的基本組件,也是一個基礎類!
transform則是Transform這個類所創建的對象,亦是指當前對象的Transform組件!

transform“.”出的常見東西

  • 屬性:

    • transform.forward
    • transform.up
    • transform.right
      注:並沒有.back、.down、.left什麼的!
  • 移動:

    • transform.Translate(x , y , z);//朝向量(x , y , z)的方向移動,向量的長度就是移動速度!
    • int moveSpeed = 10;//也可指定速度
      transform.Translate( (new Vector3(x, y, z))* moveSpeed );
    • transform.Translate( Vector3.forward , Space.Self );
      transform.Translate( transform.forward, Space.World );
      //這兩個雖然都是朝物體正前方移動,但是第一個方法中第一個參數Vector3.forward是絕對向量(絕對方向和絕對大小),默認是自身座標空間中的向量!第二個參數默認是Space.self(物體座標系)。
      第二個方法終點transform.forward則是物體本身的前方(物體座標系),描述的是這個物體座標系中的向量在世界座標系中的向量!第二個參數必須是Space.World(世界座標系) !
  • 旋轉

    • transform.Rotate( 0, 0.5f, 0 );//繞着自身的某個軸旋轉
    • transform.RotateAround( Vector3.Zero, Vector3.Up, 0.5f );//繞着特定的某個軸旋轉,繞原點朝上的方向進行旋轉,每次旋轉0.5度。
  • 縮放

    • transform.localScale
  • 朝向

    • transform.LookAt()
  • 位置

    • transform.position//在世界座標系中的位置
    • transform.localPosition//相對於父物體的位置
  • 作用
    • transform.childCount//獲取子物體的數量
    • transform.GetChild( index );//根據索引取得子物體

3、Time
Time是一個只讀屬性的類

只讀

Time”.”出的東西

  • Time.deltaTime//距離上一幀所經歷的時間
  • Time.time//從遊戲開始到你調用的時候所經歷的時間
  • Time.fixedDelTime//固定更新時間
  • Time.fixedTime//固定時間以定期間隔更新(相當於fixedDeltaTime)直到達到time屬性。
  • Time.smoothDeltime//平滑的deltaTime
  • Time.frameCount//從遊戲開始到目前所經歷的幀數(可計算平均幀率=frameCount/time)
  • Time.timeScale//時間縮放,默認是1(設爲0是暫停,1.2相當於加快了遊戲速度)
  • Time.realTimeSinceStartUp//不受timeScale影響

    可通過下面代碼在運行窗口中顯示

void OnGUI()
{
    GUILayout.Label("deltaTime:" + Time.deltaTime);
}

還可用來規避不同設備幀率的問題:
假設:
速度快的設備:1S跑10幀 Time.deltaTime爲0.1
速度慢的設備:1S跑1幀 Time.deltaTime爲1
則移動距離=5m/幀(移動速度)*Time.deltaTime(距離上一幀的時間)
速度快的和速度慢的設備在1S內移動的距離都爲:5m
5 * 0.1 * 10
5 * 1 * 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章