您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關U3D局部坐標和全局坐標的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
父子化(摘自官文原文說明)
父子化 (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)。
例如:
此時Cube1坐標視為全局部坐標或世界坐標
gameObject.transform.position=new Vector(2,2,0);就可以實現
也可以使用
Vector3 thePosition = transform.TransformPoint(newVector3(2,2,0));
gameObject.transform.position = thePosition;
Transform.TransformPoint 變換位置:變換位置從自身坐標到世界坐標(原文:Transforms position from local space to world space.)
現在給Cube1加個子對象Cube2并使Cube2移動到如圖位置
使用gameObject.transform.position=new Vector(2,2,0);將無法如愿;
問題解析:根據紅色字內容說明,此時Cube2中的檢視器 (Inspector) 的坐標顯示的是相對父級Cube1的坐標,所以只能先把自身坐標使用transform.TransformPoint方法轉為世界坐標
Vector3 thePosition = transform.TransformPoint(newVector3(2,2.5,0));
gameObject.transform.position = thePosition;
坐標系的轉換:
TransformDirection 將一個方向從局部坐標系轉換到世界坐標系
InverseTransformDirection 將一個方向從世界坐標系轉換到局部坐標系
TransformPoint 將一個點從局部坐標系轉換到世界坐標系
InverseTransformPoint 將一個點從世界坐標系轉換到局部坐標系
關于“U3D局部坐標和全局坐標的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。