Unity基礎Transform_第1頁
Unity基礎Transform_第2頁
Unity基礎Transform_第3頁
Unity基礎Transform_第4頁
Unity基礎Transform_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

6、四元數(shù)英文名叫quaternion.比如transform.rotation就是一個四元數(shù),其由四個部分組成Quaternion=(xi+yj+zk+w)=(x,y,z,w)quaternion中(x,y,z)跟旋轉軸有關,w與繞旋轉軸旋轉的角度有關,因為它們都要經(jīng)過代數(shù)運算才能得出旋轉軸和旋轉角度Unity3D中用quaternion來對一個坐標點進行旋轉,我進行的是第2種操作,即對一個向量進行旋轉;首先Quaternion的基本數(shù)學方程為:Q=cos(a/2)+i(x*sin(a/2)+j(y*sin(a/2)+k(z*sin(a/2)(a為旋轉角度)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ù)的四個部分值,例如我想要讓點M=Vector3(o,p,q)繞x軸順時針旋轉90度;那么對應的quaternion數(shù)值就應該為: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;(將點m繞x軸(1,0,0)順時針旋轉了90度)示例:usingUnityEng

8、ine;usingSystem.Collections;classEulerAnglesTest:MonoBehaviourpublicQuaternionrotation=Quaternion.identity;publicvoidAwake()rotation.eulerAngles=newVector3(0,30,0);transform.rotation=rotation;Translate移動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旋轉Transform.RotateAround圍繞旋轉LookAt盯著看transform.LookAt(Transformtarget);transform.LookAt(Vector3worldPosition);擴

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

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

12、,而且Transform類的功能更簡單。單純的矩陣用于特殊情況,如設置非標準相機投影在Unity中,Matrix4x4被Transform,Camera,Material和GL幾個函數(shù)使用。worldToLocalMatrix:矩陣變換的點從世界坐標轉為自身坐標(只讀)。localToWorldMatrix:矩陣變換的點從自身坐標轉為世界坐標(只讀)。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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論