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)。
轉載于:https://www.cnblogs.com/w-wfy/p/7623494.html
總結
以上是生活随笔為你收集整理的unity------------------------------transform.forward与Vector.forward的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CriminalIntent项目的开发
- 下一篇: ZJOI2012网络 题解报告【LCT】