Unity基礎(chǔ)Transform_第1頁
Unity基礎(chǔ)Transform_第2頁
Unity基礎(chǔ)Transform_第3頁
Unity基礎(chǔ)Transform_第4頁
Unity基礎(chǔ)Transform_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Unity基礎(chǔ)-Transform任何游戲?qū)ο笤趧?chuàng)建的時(shí)候都會附帶Transform組件,用于儲存并操控物體的位置、旋轉(zhuǎn)和縮放。并且該組件是無法刪除的。Transform面板一共包含3個(gè)屬性:Position:位置Rotation:旋轉(zhuǎn)Scale:(縮放)可修改對象的位置、旋轉(zhuǎn)方式、縮放數(shù)值position;世界坐標(biāo)系位置localPosition;本地坐標(biāo)系位置縮放localScale;自身縮放lossyScale;全局縮放旋轉(zhuǎn)transform.rotation;世界坐標(biāo)系旋轉(zhuǎn)transformocalRotation;本地坐標(biāo)系旋轉(zhuǎn)transform.eulerAngles;世界坐標(biāo)系旋

2、轉(zhuǎn)transformocalEulerAngles;本地坐標(biāo)系旋轉(zhuǎn)歐拉角構(gòu)件在三維空間中的有限轉(zhuǎn)動(dòng),可依次用三個(gè)相對轉(zhuǎn)角表示這三個(gè)轉(zhuǎn)角統(tǒng)稱為歐拉角。unity中的歐拉角有兩種方式可以解釋:當(dāng)認(rèn)為順序是yxz時(shí)(其實(shí)就是heading-pitch-bank),是傳統(tǒng)的歐拉角變換,也就是以物體自己的坐標(biāo)系為軸的。當(dāng)認(rèn)為順序是zxy時(shí)(roll-pitch-yaw),也是官方文檔的順序時(shí),是以慣性坐標(biāo)系為軸的。后者比較直觀一些,但其實(shí)兩者的實(shí)際效果是一樣的,只是理解不一樣。歐拉角有兩種:靜態(tài):即繞世界坐標(biāo)系三個(gè)軸的旋轉(zhuǎn),由于物體旋轉(zhuǎn)過程中坐標(biāo)軸保持靜止,所以稱為靜態(tài)。動(dòng)態(tài):即繞物體坐標(biāo)系三個(gè)軸的旋轉(zhuǎn)

3、,由于物體旋轉(zhuǎn)過程中坐標(biāo)軸隨著物體做相同的轉(zhuǎn)動(dòng),所以稱為動(dòng)態(tài)。使用動(dòng)態(tài)歐拉角會出現(xiàn)萬向鎖現(xiàn)象;靜態(tài)歐拉角不存在萬向鎖的問題正常狀態(tài):三個(gè)獨(dú)立的旋轉(zhuǎn)軸萬向鎖:一旦選擇土90作為pitch角,就會導(dǎo)致第一次旋轉(zhuǎn)和第三次旋轉(zhuǎn)等價(jià),整個(gè)旋轉(zhuǎn)表示系統(tǒng)被限制在只能繞豎直軸旋轉(zhuǎn),丟失了一個(gè)表示維度。萬向節(jié)死鎖會導(dǎo)致位置上連續(xù)變化,在數(shù)值表示上確是非連續(xù)的。給定的兩個(gè)關(guān)鍵幀之間無法平滑過渡。解決方法:可以使用四元數(shù)球面線性插值四元數(shù)愛爾蘭數(shù)學(xué)家Williamhamilton直致力于尋找一種方法將復(fù)數(shù)2D擴(kuò)展到3D他認(rèn)為,新的復(fù)數(shù)應(yīng)該有一個(gè)實(shí)部和兩個(gè)虛部。但是一直沒有成功。1843年,他在前往愛爾蘭學(xué)院演講的路

4、上,突然意識到應(yīng)該有三個(gè)虛部而不是兩個(gè)。他把這種新復(fù)數(shù)類型性質(zhì)刻在了橋上,這就是四元數(shù)。四元數(shù)使用四個(gè)數(shù)來表達(dá)方位,因此命名為四元數(shù)用三個(gè)數(shù)來表達(dá)3D方位,一定會導(dǎo)致萬向鎖的問題。一個(gè)四元數(shù)包含一個(gè)標(biāo)量分量和一個(gè)3D向量分量。通常標(biāo)量分量為w,向量分量為v或者分開的x,y,z.記法:w,vw,(x,y,z)四元數(shù)與復(fù)數(shù):復(fù)數(shù)定義:a+bi,i是所謂的虛數(shù),滿足i的平方等于-1;a是實(shí)部,b是虛部。四元數(shù)擴(kuò)展了復(fù)數(shù)系統(tǒng),使用了三個(gè)虛部ij,k個(gè)四元數(shù)w,(x,y,z)定義了復(fù)數(shù)w+xi+yj+zk很多標(biāo)準(zhǔn)復(fù)數(shù)的性質(zhì)都能應(yīng)用到四元數(shù)上。更重要的是,和復(fù)數(shù)來旋轉(zhuǎn)2D中的向量類似,四元數(shù)也能用來旋轉(zhuǎn)3

5、D中的向量。四元數(shù)是非常重要的工具類之一。在Unity中所有用到模型旋轉(zhuǎn)的,其底層都是由四元數(shù)實(shí)現(xiàn)的,它可以精確的計(jì)算模型旋轉(zhuǎn)的角度。Quaternion基于復(fù)數(shù)的表示并不容易被直觀地理解,因此沒有必要訪問或修改單個(gè)Quaternion組件(x,y,z,w)只需通過Transform的rotation來實(shí)現(xiàn)旋轉(zhuǎn),或者構(gòu)造新的旋轉(zhuǎn),如在兩個(gè)旋轉(zhuǎn)間平滑地插值eulerAngles屬性返回表示旋轉(zhuǎn)的歐拉角度。表示旋轉(zhuǎn)的角度,順序依次繞z軸旋轉(zhuǎn)euler.z度,繞x軸旋轉(zhuǎn)euler.x度,繞y軸旋轉(zhuǎn)euler.y度范例:創(chuàng)建一個(gè)旋轉(zhuǎn),繞y軸,指定一個(gè)30度旋轉(zhuǎn)角在unity3d中,用四元數(shù)來表示旋轉(zhuǎn),

6、四元數(shù)英文名叫quaternion.比如transform.rotation就是一個(gè)四元數(shù),其由四個(gè)部分組成Quaternion=(xi+yj+zk+w)=(x,y,z,w)quaternion中(x,y,z)跟旋轉(zhuǎn)軸有關(guān),w與繞旋轉(zhuǎn)軸旋轉(zhuǎn)的角度有關(guān),因?yàn)樗鼈兌家?jīng)過代數(shù)運(yùn)算才能得出旋轉(zhuǎn)軸和旋轉(zhuǎn)角度Unity3D中用quaternion來對一個(gè)坐標(biāo)點(diǎn)進(jìn)行旋轉(zhuǎn),我進(jìn)行的是第2種操作,即對一個(gè)向量進(jìn)行旋轉(zhuǎn);首先Quaternion的基本數(shù)學(xué)方程為:Q=cos(a/2)+i(x*sin(a/2)+j(y*sin(a/2)+k(z*sin(a/2)(a為旋轉(zhuǎn)角度)Q.w=cos(angle/2)Q.x

7、=axis.x*sin(angle/2)Q.y=axis.y*sin(angle/2)Q.z=axis.z*sin(angle/2)我們只要有角度就可以給出四元數(shù)的四個(gè)部分值,例如我想要讓點(diǎn)M=Vector3(o,p,q)繞x軸順時(shí)針旋轉(zhuǎn)90度;那么對應(yīng)的quaternion數(shù)值就應(yīng)該為:Q:Quaternion;Q.x=1*sin(90度/2)=sin(45度)=0.7071Q.y=0;Q.z=0;Q.w=cos(90度/2)=cos(45度)=0.7071Q=(0.7071,0,0,0.7071);m=Q*m;(將點(diǎn)m繞x軸(1,0,0)順時(shí)針旋轉(zhuǎn)了90度)示例:usingUnityEng

8、ine;usingSystem.Collections;classEulerAnglesTest:MonoBehaviourpublicQuaternionrotation=Quaternion.identity;publicvoidAwake()rotation.eulerAngles=newVector3(0,30,0);transform.rotation=rotation;Translate移動(dòng)transform在translation的方向和距離。Space.Self和Space.World注意,vector.forward和tranform.forward區(qū)別););Debug.L

9、og(Debug.Log(Vector3.forward);Debug.Log(Vector3.right);Debug.Log(Vector3.up);Debug.Log(Debug.Log(transform.forward);Debug.Log(transform.right);Debug.Log(transform.up);RotateTransform.Rotate旋轉(zhuǎn)Transform.RotateAround圍繞旋轉(zhuǎn)LookAt盯著看transform.LookAt(Transformtarget);transform.LookAt(Vector3worldPosition);擴(kuò)

10、展transform.LookAt(Transformtarget,Vector3worldUp);z軸指向目標(biāo)后,y軸旋轉(zhuǎn)變換指向由worldUp向量暗示的方向。如果省略worldUp參數(shù),該函數(shù)將使用世界y軸。worldUp只是一個(gè)提示矢量。Find:通過名字查找子物體并返回它。如果沒有查找到子物體名字,將返回null。如果名字包含“/”字符它將向路徑一樣穿越層次。GetChild():根據(jù)子節(jié)點(diǎn)的序列查找子物體。Transform維護(hù)父子關(guān)系Transform.root根Transform.parent父級Transform.childCount子物體數(shù)Transform.SetPare

11、nt();設(shè)置父節(jié)點(diǎn)Transform.DetachChildren分離子物體坐標(biāo)系變換TransformPoint:變換位置從物體坐標(biāo)到世界坐標(biāo)InverseTransformPoint:變換位置從世界坐標(biāo)到自身坐標(biāo)TransformDirection:將一個(gè)方向從局部坐標(biāo)變換到世界坐標(biāo)方向。InverseTransformDirection:將一個(gè)方向從世界坐標(biāo)變換到局部坐標(biāo)方向。(擴(kuò)展)矩陣(Matrix)個(gè)標(biāo)準(zhǔn)的4x4變換矩陣。個(gè)變換矩陣可以執(zhí)行任意的線形3D變換(例如,平移,旋轉(zhuǎn),縮放,切變等等)并且透視變換使用齊次坐標(biāo)。腳本中很少使用矩陣:最常用Vector3,Quaternion

12、,而且Transform類的功能更簡單。單純的矩陣用于特殊情況,如設(shè)置非標(biāo)準(zhǔn)相機(jī)投影在Unity中,Matrix4x4被Transform,Camera,Material和GL幾個(gè)函數(shù)使用。worldToLocalMatrix:矩陣變換的點(diǎn)從世界坐標(biāo)轉(zhuǎn)為自身坐標(biāo)(只讀)。localToWorldMatrix:矩陣變換的點(diǎn)從自身坐標(biāo)轉(zhuǎn)為世界坐標(biāo)(只讀)。Debug丄og(transform.position);Debug.Log(transform.localPosition);Vector4vec=newVector4(transform.localPosition.x,transform.localPosition.y,transform.localPosition.z,1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論