unity------------------------------transform.forward與Vector.forward的區別


在unity3d中有2個forward,一個是vector3.forward和transform.forward,這兩個forward其實完全不一樣。他們之間的區別主要體現在在不同坐標系時的反映上。

 

 

我們分別對比一下 vector3和transform兩個向量的forward 在 self自身坐標系 和 world世界坐標系 中的表現,我們用transform.translate函數來驗證。。

注:自身坐標!=世界坐標 意味着兩個坐標系不重合。

 

self自身坐標系——space.self

vector3.forward

transform.forward

在這里我就感到很困惑了,為什么transform.forward轉自身坐標后會有如此詭異的結果。

 

 

畫完上面的圖后終於明白了。

self自身坐標系的轉換是這樣的:

將想要轉換的向量跟相對於世界坐標軸整個移到目標坐標軸上。

在transform.forward身上就是

 

那么這里總結一下 vector3.forward和transform.forward的區別。

vector3.forward的值永遠等於(0,0,1)。

transform.forward的值則等於當前物體的自身坐標系z軸在世界坐標上指向,因此不一定等於(0,0,1),但是其magnitude長度是1。

這也就是為什么,transform.forward 轉換為self自身坐標系時會有這種結果。

 

在world世界坐標系——space.world上的情況則完全相反。

 

因此,想要讓物體向前移動,在transform.translate()上和直接修改transform.position上,差別是挺大的。

 

transform.position 本身就是世界坐標。

1、transform.position+= vector3.forward 

等於是在世界坐標的z軸前進。

2、transform.position+=transform.forward 

等於是物體自身坐標系的z軸前進。

 

3、transform.translate(vector3.forward,space.self) 

等於是自身坐標系的z軸前進。

效果等同於2。

4、transform.translate(transform.forward,space.self) 

上面出現的奇葩結果就是這個用法引起的,建議不是特殊需要別用這個用法。

5、transform.translate(vector3.forward,space.world)

等於是讓物體沿着世界坐標的z軸前進。

效果等同於1。

6、transform.translate(transform.forward,space.world)

等於是讓物體沿着“物體自身坐標z軸在世界坐標上的方向”前進(等同與物體沿着自身z軸前進)。

效果等同於2。

 

 

沒想到這篇小小的文章這么多人看,搞得我詐屍回來補充點說明。

 

其實transform大家可以理解為 scene視圖里面 每個gameobject身上的那三個箭頭,你也可以理解為transform就是自身坐標系。transform上每個箭頭就是對應transform.up transform.right transform.forward 這三個世界坐標向量,這三個向量絕對不是vector3.up vector3.forward vector3.right之流全是(0,1,0)(0,0,1)(1,0,0),不過magnitude都是1就是了,從圖里看就知道了。

圖中 transform.forward=(0, 0.9, -0.5) 

那么 transform.translate(tranform.forward,space.self) 就是 往自身坐標系的(0, 0.9, -0.5) 這個方向走。

那么用Transform的TransformPoint()轉換成世界坐標就是 (-0.7, 3.9, -25.8),也就是gameobject這個物體的實際移動方向是(-0.7, 3.9, -25.8)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM