日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity------------------------------transform.forward与Vector.forward的区别

發布時間:2025/3/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。