unity指令碼的一些筆記(三)
阿新 • • 發佈:2019-02-14
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()
- 返回改物體在同級別的物體中的位置