1. 程式人生 > >unity指令碼的一些筆記(三)

unity指令碼的一些筆記(三)

Transform 場景變換

一、座標系

1. 變數

a. Right、Up和Forward

  • 分別表示表示物體本身座標系(local space)的x,y和z方向向量

2. 函式

a. TransformPoint()

  • 把物體local space座標轉為world space座標,引數為Vector3或三個float
  • 比如把一個cube移到玩家面前兩個單位的距離的位置可以這麼寫
cube.transform.position = player.transform.TransformPoint(0, 0, 2);

b. InverseTransformPoint()

  • 和TransformPoint()相反,把世界座標轉換成物體的local space

c. TransformDirection()

  • 一個方向向量從自身座標系到世界座標系的變換方向

d. InverseTransformDirection()

  • 一個方向向量從世界座標系到本身座標系的變換

二、位移

1. 變數

a. position

  • 物體在世界座標的位置

b. localPosition

  • 相對父物體的位置,如果沒有父物體,則值和position相等

2. 函式

a. translate()

  • 物體位置的變換的函式,可以沿某個方向向量移動或像某個點移動
  • 可以選擇移動是以物體本身座標系還是世界座標系

三、旋轉

1. 變數

a. eulerAngles

  • 尤拉角,相對世界座標各方向旋轉的角度

b. localEulerAngles

  • 相對於父物體各方向旋轉的角度

c. rotation

  • 型別是一個四元素Quaternion,是旋轉另一種表示
  • 和尤拉角旋轉相比不會出現萬向節鎖(gimbal lock)

d. localRotation

  • 相對於父物體旋轉的四元素

2. 函式

a. Rotate()

  • 繞某一個向量旋轉一定的角度
  • 在Update中旋轉的角度乘上Time.deltaTime就實現每秒勻速旋轉某角度

b. RotateAround()

  • 函式有三個引數,第一個是一個點,第二個是一個軸,第三個是旋轉角度,就是物體繞某個點的一個軸旋轉
  • 下面程式碼就表示物體繞一條垂直於座標原點的軸以每秒20度的轉速旋轉
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);

c. LookAt()

  • 用於一個物體的z軸一直向著某個物體
  • 有兩個引數,第一個是被朝向的物體的座標,第二個是看的物體以哪個向量方向朝上,預設是物體的本身的up朝上

d. Quaternion.RotateTowards()

  • 這個函式不是在Transform裡面的,是四元素Quaternion的函式,有三個引數第一個是當前的旋轉姿態,第二個是想要的旋轉姿態,這兩個旋轉姿態都是用四元素Quaternion表示的,第三個引數是旋轉速度
  • 這個函式是有返回值的,返回的是旋轉的姿態,把返回值賦給transform.rotation,下面是一個旋轉的例子
transform.rotation = Quaternion.RotateTowards(
    transform.rotation,
    target.rotation,
    speed * Time.deltaTime
);

四、縮放

1. 變數

a. lossyScale

  • 只讀變數
  • 引用官方解釋:如果你有一個會縮放的父物體和會任意旋轉的子物體,物體的縮放將有偏差。因此縮放不能用3個向量正確地表示,只能用一個3x3矩陣表示。這樣的表示使用起來非常不方便,lossyScale是個很方便的屬性,它儘量匹配實際世界的縮放,如果你的物體不是斜的,這個值將是完全正確的,如果物體是斜的,這個值也不會有很大的不同。

b. localScale

  • 表示物體的三維大小,是一個Vector3

五、位置關係

1. 變數

a. parent

  • 物體的父物體,如果修改了該值,物體的座標、大小和旋轉都會變成相對於父物體的值,不過相對於世界這些值都不會變

b. root

  • 返回物體的最頂層的父物體,如果物體沒有父物體,則值為物體本身

childCount

  • 子物體的數量

2. 函式

a. Find()

  • 利用反射查詢某個子物體,引數是字串,表示物體的層級
  • 返回Transform類

b. IsChildOf()

  • 判斷某物體是不是某物體的子類

c. DetachChildren()

  • 刪掉和所有子物體的父子關係,把它們變會一個個獨立物體

d. GetChild()

  • 引數是一個整形的index,表示child的位置,index的值小於childCount

e. GetSiblingIndex()

  • 返回改物體在同級別的物體中的位置