寧波新亞建設(shè)公司網(wǎng)站seo的主要工作內(nèi)容
本章節(jié)我們介紹Transform類(lèi),它是一個(gè)組件,每一個(gè)游戲?qū)ο笥袚碛性摻M件。因此,它值得我們重點(diǎn)介紹一下。Transform代表了游戲?qū)ο蟮氖澜缱儞Q,也就是移動(dòng),選擇和縮放。
首先,我們先介紹它的屬性(類(lèi)變量),如下所示
1. gameObject 附加到的當(dāng)前游戲?qū)ο?#xff0c;來(lái)自父類(lèi)Component
2. name 當(dāng)前游戲?qū)ο蟮拿Q(chēng),來(lái)自父類(lèi)Component
3. tag 當(dāng)前游戲?qū)ο蟮臉?biāo)簽,來(lái)自父類(lèi)Component
4. transform 當(dāng)前游戲?qū)ο蟮腡ransform,來(lái)自父類(lèi)Component
因?yàn)樗械慕M件都繼承自Component,所以所有的組件都會(huì)有以上四個(gè)類(lèi)實(shí)例變量。
接下來(lái),我們介紹Transform組件獨(dú)有的類(lèi)實(shí)例變量。
position???????????????????世界空間中的變換位置,它是一個(gè)Vector3三維向量。
localPosition???????????相對(duì)于父級(jí)的變換位置。若無(wú)父級(jí),等同于position。
rotation????????????????????世界坐標(biāo)系中的旋轉(zhuǎn),它是一個(gè)Quaternion四元數(shù)。
localRotation???????????相對(duì)于父級(jí)的旋轉(zhuǎn),也是一個(gè)四元數(shù)。
eulerAngles?????????????世界坐標(biāo)系中的旋轉(zhuǎn),它是一個(gè)歐拉角(Vector3三維向量表示)。
localEulerAngles?????相對(duì)于父級(jí)的旋轉(zhuǎn),也是一個(gè)歐拉角。
lossyScale???????????????世界坐標(biāo)系中的縮放,但它是只讀屬性,它是一個(gè)Vector3三維向量。
localScale????????????????相對(duì)于父級(jí)的縮放,我們經(jīng)常使用這個(gè)屬性進(jìn)行縮放操作。
因?yàn)樵赨nity中,游戲?qū)ο蠼?jīng)常會(huì)組織成父子關(guān)系,因此就有了世界坐標(biāo)系和相對(duì)于父級(jí)的坐標(biāo)系兩個(gè)概念。因?yàn)?#xff0c;有時(shí)候相對(duì)于父級(jí)做參考,來(lái)改變移動(dòng),選擇和縮放的話(huà),會(huì)比較簡(jiǎn)單方便。需要注意的是,在Inspector檢視視圖中的Transform中的position,rotation和scale是相對(duì)父級(jí)坐標(biāo)系的。也就對(duì)應(yīng)了上面提到的localPosition,localRotation,localEulerAngles和localScale。四元數(shù)和歐拉角是兩種不同的旋轉(zhuǎn)數(shù)值方式,彼此之間可以相互轉(zhuǎn)化。
parent? ? ? ? ? ? ? ?返回父級(jí)游戲?qū)ο蟮淖儞QTransform對(duì)象。
childCount?? ??? ?返回父級(jí)游戲?qū)ο笙掠卸嗌賯€(gè)子游戲?qū)ο蟆?br /> root? ? ? ? ? ? ? ? ? ?返回最頂層的父級(jí)變換Transform對(duì)象。
以上三個(gè)屬性變量可以幫助我們處理游戲?qū)ο笾g的父子關(guān)系,當(dāng)然也可通過(guò)方法來(lái)實(shí)現(xiàn)。接下來(lái),我們繼續(xù)Transform組件的其他屬性變量(本質(zhì)是一個(gè)Vector3向量)。
right???????????????????世界空間中變換的紅軸/X軸方向
up??????????????????????世界空間中變換的綠軸/Y軸方向
forward??????????????世界空間中變換的藍(lán)軸/Z軸方向
unity世界坐標(biāo)系是一個(gè)左手坐標(biāo)系,上面的三個(gè)變量就對(duì)應(yīng)了三根手指方向。
我們繼續(xù)說(shuō)明Transform的方法。
CompareTag????????????????????????????當(dāng)前游戲?qū)ο笫欠袷褂昧酥付?biāo)簽
GetComponent????????????????????????按照類(lèi)型獲取一個(gè)組件
GetComponentInChildren???????從子游戲?qū)ο笾蝎@取一個(gè)組件
GetComponentInParent??????????從父游戲?qū)ο笾蝎@取一個(gè)組件
GetComponents??????????????????????按照類(lèi)型獲取所有組件
GetComponentsInChildren??????從子游戲?qū)ο笾蝎@取所有組件
GetComponentsInParent????????從父游戲?qū)ο笾蝎@取所有組件
以上方法均來(lái)自于父類(lèi)Component,也就是說(shuō)所有組件都有以上7個(gè)方法。我們發(fā)現(xiàn),這些方法與MonoBehaviour中的方法使用是一樣的(腳本也是組件嘛)。同時(shí)在GameObject類(lèi)中也有類(lèi)似的方法。由此可見(jiàn),在Unity中有很多地方(腳本中,組件中,GameObject中)都提供了獲取組件的方法。這一點(diǎn)希望大家不要混淆,雖然重復(fù)出現(xiàn)很多,但是使用場(chǎng)景是不一樣的(后面介紹)。接下來(lái),我們介紹Transform自己的方法:
Translate????????根據(jù)Vector3向量(方向和距離)移動(dòng)變換。
Rotate????????????根據(jù)Vector3向量選擇變換。
以上兩個(gè)方法用來(lái)做移動(dòng)和旋轉(zhuǎn),通常這兩個(gè)方法提供兩個(gè)參數(shù),一個(gè)是Vector3向量參數(shù),另一個(gè)是坐標(biāo)系參數(shù),也就是Space.Self本地坐標(biāo)系和Space.World世界坐標(biāo)系。游戲?qū)ο蟮囊苿?dòng)和旋轉(zhuǎn)是以參考坐標(biāo)系為前提的,這個(gè)就類(lèi)似于Unity工具欄上面的變換按鈕以及坐標(biāo)系選擇按鈕,如果忘記的同學(xué),可以看一看前面的章節(jié)復(fù)習(xí)一下。
關(guān)于旋轉(zhuǎn),還有另外兩個(gè)方法,如下:
RotateAround????????圍繞穿過(guò)世界坐標(biāo)中的 point 點(diǎn)的 axis軸旋轉(zhuǎn) angle 度。
LookAt???????????????????向target 位置進(jìn)行旋轉(zhuǎn),類(lèi)似于轉(zhuǎn)頭看向target 位置的操作。
在世界變換中,最難處理的就是旋轉(zhuǎn),Unity提供多個(gè)旋轉(zhuǎn)方法也是為了我們方便操作。
關(guān)于縮放的操作,Unity并沒(méi)有提供太多方法來(lái)實(shí)現(xiàn),可能是因?yàn)椴唤?jīng)常用吧。
SetParent? ? ? ? ? ? ? ? 設(shè)置變換的父級(jí)。
IsChildOf?????????????????該變換是否為 parent 的子級(jí)。
GetChild??????????????????按索引返回變換子級(jí)。
GetSiblingIndex??????獲取同級(jí)索引。
SetSiblingIndex??????設(shè)置同級(jí)索引。
以上方法主要用于變換Transform(等效于游戲?qū)ο驡ameObject)的父子層級(jí)操作。
關(guān)于Transform的其他方法我們暫且不介紹了。
接下來(lái),我們來(lái)介紹Vector3向量。Vector3三維向量類(lèi),它既可以用來(lái)移動(dòng),也可以用來(lái)旋轉(zhuǎn),也可以用來(lái)縮放。其實(shí),我們還應(yīng)該知道Vector3既可以代表三維坐標(biāo)系中的點(diǎn)坐標(biāo),還可以代表方向和長(zhǎng)度(向量的本意)。大家應(yīng)該明白,游戲世界的本質(zhì)是數(shù)學(xué),而向量的運(yùn)算占據(jù)了游戲世界的一大部分,至少我們可以看到,游戲?qū)ο蟮氖澜缱儞Q都可以使用向量來(lái)完成。關(guān)于向量的相關(guān)運(yùn)算,我們就不做詳細(xì)介紹了,它的內(nèi)部本質(zhì)就是x,y,z三個(gè)浮點(diǎn)數(shù)值,與三維世界的X/Y/Z軸向一一對(duì)應(yīng)。我們先直接看看Vector3類(lèi)的屬性變量吧。
x??????????????????????????????? 向量的 X 分量。
y????????????????????????????????向量的 Y 分量。
z????????????????????????????????向量的 Z 分量。
magnitude? ? ? ? ? ? ? ? ?返回該向量的長(zhǎng)度。(只讀)
sqrMagnitude? ? ? ? ? ? 返回該向量的平方長(zhǎng)度。(只讀)
normalized? ? ? ? ? ? ? ? 返回長(zhǎng)度為1的方向向量。(只讀)
Vector3類(lèi)的普通方法并不是很多,我們就不介紹了。
接下來(lái)我們看看Vector3類(lèi)的靜態(tài)變量(本質(zhì)是一個(gè)Vector3向量)。
zero??????????????????????????相當(dāng)于Vector3(0, 0, 0)坐標(biāo)系原點(diǎn)
right??????????????????????????相當(dāng)于Vector3(1, 0, 0)X軸正方向
up?????????????????????????????相當(dāng)于Vector3(0, 1, 0)Y軸正方向
forward?????????????????????相當(dāng)于Vector3(0, 0, 1)Z軸正方向
left????????????????????????????相當(dāng)于Vector3(-1, 0, 0)X軸負(fù)方向
down????????????????????????相當(dāng)于Vector3(0, -1, 0)Y軸負(fù)方向
back?????????????????????????相當(dāng)于Vector3(0, 0, -1)Z軸負(fù)方向
其實(shí)就是我們對(duì)于原點(diǎn)和六個(gè)方向的簡(jiǎn)便寫(xiě)法而已。
最后我們?cè)诮o出Vector3類(lèi)中一些常用的靜態(tài)方法吧。
1. Angle返回from與to之間的角度(以度為單位)。
2. ClampMagnitude返回vector的副本,其大小被限制為maxLength。
3. Cross兩個(gè)向量的叉積。
4. Distance返回 a 與 b 之間的距離。
5. Dot兩個(gè)向量的點(diǎn)積。
6. Lerp?在兩個(gè)點(diǎn)之間進(jìn)行線(xiàn)性插值。
7. LerpUnclamped在兩個(gè)向量之間進(jìn)行線(xiàn)性插值。
8. Max?返回由兩個(gè)向量的最大分量組成的向量。
9. Min?返回由兩個(gè)向量的最小分量組成的向量。
10. MoveTowards?計(jì)算 current 指定的點(diǎn)與 target 指定的點(diǎn)之間的位置,移動(dòng)距離不超過(guò) maxDistanceDelta 指定的距離。
11. Normalize使該向量的 magnitude 為 1。
12. OrthoNormalize將向量標(biāo)準(zhǔn)化并使它們彼此正交。
13. Project將向量投影到另一個(gè)向量上。
14. ProjectOnPlane將向量投影到由法線(xiàn)定義的平面上(法線(xiàn)與該平面正交)。
15. Reflect從法線(xiàn)定義的平面反射一個(gè)向量。
16. RotateTowards將向量 current 朝 target 旋轉(zhuǎn)。
17. Scale將兩個(gè)向量的分量相乘。
18. SignedAngle返回 from 與 to 之間的有符號(hào)角度(以度為單位)。
19. Slerp在兩個(gè)向量之間進(jìn)行球形插值。
20. SlerpUnclamped在兩個(gè)向量之間進(jìn)行球形插值。
21. SmoothDamp????隨時(shí)間推移將一個(gè)向量逐漸改變?yōu)樗枘繕?biāo)。
以上方法我們會(huì)在后面的案例中詳細(xì)介紹。