找回密碼
 注冊帳號

掃一掃,訪問微社區

變換

2015-1-7 04:06| 發布者: 楊炎| 查看: 1685| 評論: 0|原作者: 蠻牛|來自: unity3d腳本manual

摘要: 變換變換component決定場景中每個對象的位置 (position)、旋轉 (rotation)和縮放 (scale)。每個對象都有一個變換 (transform) 屬性。場景視圖 (scene view)和檢視器 (inspector)可以編輯變換組件 (transform compone ...

變換

變換component決定場景中每個對象位置 (position)旋轉 (rotation)縮放 (scale)。每個對象都有一個變換 (transform) 屬性

場景視圖 (scene view)檢視器 (inspector)可以編輯變換組件 (transform component)

屬性

屬性:

功能

位置 (position)

x、y 和 z 坐標中變換 (transform) 的位置。

旋轉 (rotation)

變換 (transform) 圍繞 x、y 和 z 軸的旋轉,以度計。

縮放 (scale)

變換 (transform) 沿 x、y 和 z 軸的縮放。“1” 是原始大小(對象被導入時的大小)。

變換 (transform) 的所有屬性都是參照它的父級進行測量的(請參閱以下內容了解更多詳細信息)。如果變換 (transform) 無父級,則參照世界坐標空間 (world space) 測量屬性。

使用變換

通常在 x、y 和 z 軸的三維空間中控制變換 (transform)。在 unity 中,分別用紅色、綠色和藍色代表這些軸。請記住:xyz = rgb。

三個軸和變換 (transform) 屬性之間的顏色編碼關系

可以在場景視圖 (scene view)中或通過編輯檢視器 (inspector) 中的屬性來直接控制變換 (transform)。在場景中,您可以使用“移動”(move)、“旋轉”(rotate) 和“縮放”(scale) 工具來修改變換 (transform)。上述工具位于 unity 編輯器 (editor) 左上角。

“視圖”(view)、“平移”(translate)、“旋轉”(rotate) 和“縮放”(scale) 工具

這些工具可用于場景中的任何對象。單擊對象時,您會看見場景中出現工具小圖示。小圖示的外觀取決于選擇哪種工具。

可以直接在場景視圖 (scene view) 中編輯三個小圖示 (gizmo)。

當您單擊或拖動其中一個小圖示時,您會注意到它變化顏色。拖動鼠標時,您會看見對象沿選定的軸平移、旋轉和縮放。釋放鼠標按鈕后,軸仍然被選定。單擊中間的鼠標按鈕并拖動鼠標來沿選定的軸控制變換 (transform)。

單擊任何軸時就已選定該軸

圍繞變換 (transform) 小圖示中心的是三個有色的方框。這些方框使您可以在單個平面內拖動變換 (transform)(即,對象會在兩個軸上移動,但在第三個軸上保持不動)。

在 xz 平面內拖動

父子化

父子化 (parenting) 是使用 unity 時需要理解的最重要的概念之一。當某個游戲對象 (gameobject) 是另一個游戲對象 (gameobject) 的父級 (parent)時,子級 (child)游戲對象 (gameobject) 會像其父級 (parent) 一樣移動、旋轉和縮放。正如您的手臂與軀干相連,轉動軀干時,手臂因為與其相連也會移動。任何對象都可以有多個子級,但卻只能有一個父級。

您可以通過將層級視圖 (hierarchy view)的任何游戲對象 (gameobject) 拖到另一個游戲對象上來創建一個父級 (parent)。此操作會在兩個游戲對象 (gameobject) 之間創建一種父子關系。

父子層級視圖 (hierarchy) 示例。名稱左側有折疊箭頭的游戲對象 (gameobjects) 是父級。

上述示例中,我們認為軀干是手臂的父級而手臂是手的父級。您在 unity 中制作的場景將包含這些變換層級 (transform hierarchy)的集合。最上層的父級對象被稱為根對象 (root object)。當您移動、縮放或旋轉某個父級對象時,其變換 (transform) 中的所有變化都會被應用于其子級對象。

值得指出的是任何子級游戲對象 (child gameobject) 的檢視器 (inspector) 中的變換 (transform) 值都會相對于父級 (parent) 的變換 (transform) 值而顯示。這些值又被稱局部坐標 (local coordinate)。您可以通過腳本處理訪問全局坐標 (global coordinate)和局部坐標 (local coordinate)。

您可以將多個單獨的對象一起父子化來構建復合對象,例如,布娃娃的骨架結構。您還可以通過簡單的層級實現有用的效果。例如,如果您有個夜間恐怖游戲,您就可以用手電筒創造有效氣氛。要創建此對象,您要使手電筒變換 (transform) 成為聚光燈變換 (transform) 的父級。然后,手電筒變換 (transform) 的任何修改都會影響聚光燈,創建一個逼真的手電筒效果。

非等比縮放的性能問題和局限性

非等比縮放是指當變換 (transform) 中的縮放 (scale)屬性的 x、y 和 z 值不同時;例如 (2, 4, 2)。與此相反,等比縮放中的 x、y 和 z 值相同;例如 (3, 3, 3)。非等比縮放可能在少數選擇個案中是有用的,但能避免使用它時就應避免。

非等比縮放對渲染性能有負面影響。為正確變換頂點法線,我們變換 cpu 上的網格并另外創建一份數據拷貝。通常我們可以保持網格在圖形內存實例之間共享,但這樣您就每個實例都需支付 cpu 和內存成本。

unity 處理非等比縮放的方式也有一定局限性:

某些組件不完全支持非等比縮放。例如,對于有半徑或類似屬性的組件,例如球體碰撞組件 (sphere collider)膠囊碰撞組件 (capsule collider),燈光(light),音頻源 (audio source)等等,形狀不會變成橢圓,而是仍然保持圓形/球形,不管如何進行非等比縮放。

有一個非等比縮放的父級且相對該父級被旋轉的子級對象可能會有一個非正交矩陣,這意味著它可能出現偏斜。一些確實支持簡單非等比縮放的組件仍不支持非正交矩陣。例如,箱體碰撞組件 (box collider)不能偏斜,所以如果它的變換 (transform) 是非正交的,則箱體碰撞組件 (box collider) 不會準確匹配被渲染的網格的形狀。。

出于性能原因,有一個非等比縮放的父級的子級對象在旋轉時不會自動更新其縮放/矩陣。這可能導致縮放一旦更新就會彈出,例如,如果對象與其父級分離。

縮放的重要性

(transform) 的縮放決定建模應用程序中網格和 unity 中網格之間的大小差異。unity 中的網格大小(因此變換 (transform) 的縮放)常重要,特別是在物理模擬期間。有三個可以影響對象縮放的系數:

三維建模應用程序中網格的大小。

對象的導入設置 (import settings)中的網格縮放系數 (mesh scale factor)設置。

變換組件 (transform component) 的縮放 (scale)值。

理想情況下,您不應該調整變換組件 (transform component) 中對象的縮放 (scale)值。最佳選項是按實際比例創建您的模型,這樣您就不必改變變換 (transform) 的縮放值。第二最佳選項是調整在單個網格的導入設置 (import settings中導入網格時的縮放值。根據導入大小會進行某些優化,而實例化有一個調整過的縮放值的對象會降低性能。有關更多信息,請參閱剛體組件參考頁面上的優化縮放部分。

提示

父子化變換 (transform) 時,請在添加子級之前將父級的位置設置為 <0,0,0>。這會為您以后節省很多精力。

粒子系統 (particle system)不受變換 (transform) 的縮放 (scale)的影響。為縮放某個粒子系統 (particle system),您需要修改該系統的粒子發射器、動畫器和渲染器的屬性。

如果您正將剛體 (rigidbody)用于物理模擬,則您可以參考在類別 - 剛體組件參考頁面上的一些有關“縮放”(scale) 屬性的重要信息。

您可以從偏好設置改變變換 (transform) 軸(和其他 ui 元素)的顏色,(菜單:unity > 偏好設置 (preferences),然后選擇顏色和按鍵 (colors & keys)面板)。.

如果可能,最好避免在 unity 中進行縮放。試著在三維建模應用程序中或在網格的導入設置 (import settings中完成對象的縮放。s

上一篇:二維紋理(texture2d)下一篇:三維紋理

相關閱讀

文章點評
相關文章
女校游泳队彩金