每個遊戲物件(gameobject),其存在於遊戲世界,都有乙個位置、朝向、大小等基本定位資訊;其存於hierarchy面板,也存在與其他gameobject的相對關係,如父子關係、兄弟關係。unity中使用transform來描述和操作這些屬性。
transform的字面理解就是「變換」的意思,所有的gameobject,當其被建立完成之後,均自動建立了這樣乙個變換元件,你不需要手動建立這個元件,而且無法刪除此元件。
接下來,我們將變換元件的主要屬性和功能一一進行解釋。
層次面板
這裡所說的變換,就是指所處的位置、旋轉(朝向)、縮放(大小)等資訊。
unity下的單位是公尺,比如你新建乙個cube,那麼它預設的尺寸是1x1x1的尺寸,那麼我們想要設定這個cube到需要的尺寸,只要修改它的trasform下的scale三維向量引數即可,它代表了在1x1x1這個基礎上所進行的縮放。
那些從外部匯入的三維模型物件,它本身就帶有乙個區域性的座標系,和這個三維物件相對此區域性座標系的尺寸和位置。若要修改它的尺寸,則是基於此物件在其匯入的區域性座標系中的尺寸和位置為基礎,進行相應的縮放。
由於一棵樹代表了很多個層次的存在,每個節點均有自己的縮放、旋轉、位置等資訊。而且子節點的變換狀態會跟隨父節點變換狀態的變化而改變,因此unity中存在區域性座標和全域性座標的概念。區域性座標是指其相對直接父節點的變換資訊,而全域性座標是指當前節點疊加了所有父節點的累積變換之後的狀態結果。
接下來詳細了解變換相關的屬性和方法。
通過以上屬性看出,都每個變換屬性都有區域性和全域性之分。位置和縮放比較容易理解。不過縮放有兩種表現形式,一種是尤拉角,一種是四元數,實際上四元數也就是使用尤拉角在進行計算。對於這部分數學不熟悉的同學不必緊張,我們不需要詳細了解四元數的原理,只要學會使用即可。後續的章節中我們會慢慢熟悉四元數的一些用法,而對於尤拉角,我們只要簡單知道其概念即可:尤拉角是用相對z、x、y軸旋轉一定的度數來表示旋轉的一種方法,請記住它是按照先z、再x、再y這個順序進行旋轉的。
unity文件上講到,如果你對於尤拉角不是很熟悉,就不要使用它,四元數可以滿足你的要求了。而實際上我們對於簡單一些旋轉計算,使用尤拉角是更方便的,速度也更快,比如,我們只需要某個物體相對其父節點圍繞x、y、z中的單一軸進行旋轉,此時文件相對簡單,我們可以使用尤拉角進行處理,稍微複雜一點的情況,後面的四元數章節在做解釋。
另外需要注意幾點:
1、vector、quaternion 都是結構體,通過localrotation、position等以上函式獲取的結果都是存在乙個結構體中的,此時的返回結果是存在單獨開闢的新記憶體中的,因此對其直接修改不能影響其原有數值,我們必須以localrotation=vector這種形式對其賦值,讓其進行函式內進行實際賦值操作。
2、transform也是乙個元件,儘管每個gameobject類中都有transform這個成員,但其內部實現依然是getcomponent的函式呼叫,而這種函式呼叫是比較耗時的,考慮到頻繁需要對transform進行操作,因此,我們應該在指令碼的初始化過程中獲取乙個transform引用並保留下來,以便後續呼叫而避免頻繁使用到getcomponent。這也是上一節**中我們這樣做的目的。
C程式設計導引(4)
第5章 函式 函式是c程式的基本組織單位。有關識別符號 c語言的識別符號一般應遵循如下的命名規則。1 識別符號必須以字母a或下劃線開頭,其後的可以是字母 下劃線和數字,其他字元不允許出現在識別符號中。2 識別符號區分大小寫字母 3 識別符號的長度,c89規定31個字元以內,c99規定63個字元以內 ...
《超越C 標準庫 Boost庫導引》 目錄
序 foreword 前言 preface 致謝 acknowledgments 關於作者 about the author 本書的組織結構 anization of this book boost 庫簡介 introduction to boost string and text processi...
《超越C 標準庫 Boost庫導引》 前言
親愛的讀者,歡迎來到 超越 c 標準庫 boost 庫導引 如果你對泛型程式設計 庫設計 以及 c 標準庫感興趣,這本書就是為你準備的。因為本書所針對的讀者是中高階的 c 程式設計師,c 的一些基礎概念在本書中幾乎沒有涉及。正如標題所暗示的那樣,本書的重點是 boost 庫的常規用法 好的習慣 實現...