2014年10月11日 星期六

[Unity] Transform

先直接複製官網教學
http://docs.unity3d.com/Manual/class-Transform.html
=====================================================
The Transform component determines the PositionRotation, and Scale of each object in the scene. Every GameObject has a Transform.

Properties

Property:Function:
PositionPosition of the Transform in X, Y, and Z coordinates.
RotationRotation of the Transform around the X, Y, and Z axes, measured in degrees.
ScaleScale of the Transform along X, Y, and Z axes. Value “1” is the original size (size at which the object was imported).
The position, rotation and scale values of a Transform are measured relative to the Transform’s parent. If the Transform has no parent, the properties are measured in world space.
=====================================================
經驗上來說,Transform就是Unity最重要的屬性了
因為他代表一個物件在空間中的位置,旋轉量,和大小
這邊解釋一下官網說明的最後一句
Unity的物件是可以有親子關係的,有點像是人坐在車裡
因此物件的transform數值基本上都是以父物件為0點的數值 (做進車裡後,就只管自己坐在車子的什麼位置)
也因此Unity裡只要父物件移動,子物件也會跟著移動 (車子開,坐在裡面的人就被載著走了)

最後要額外解釋一下rotation
基本上Unity的position是用三個參數去表示x,y,z 程式中也會常常看到用一個名為Vector3的類別去建構三維變數(http://docs.unity3d.com/ScriptReference/Vector3.html
rotation是用Quaternion(http://docs.unity3d.com/ScriptReference/Quaternion.html)去儲存,Quaternion是一個有四維度(w,x,y,z)當變數的類別,但原則上不用去管wxyz的值,基本上由於難以理解官方文件也建議不要修改wxyz,因此如上圖實際上我們看到用三個維度的表示法叫做尤拉角(只是呈現出來是這樣,實際上還是用Quaternion儲存)
不過Unity的尤拉角跟一般數學上的尤拉角表示法也不太一樣,Unity的尤拉角很容易理解,呈現旋轉量是"先延自己的Y軸旋轉y度,再延自己的X軸選轉x度,最後再延自己的Z軸選轉z度",但雖然理解起來容易,這種表示法卻讓人很難直覺的去修改旋轉量,所以要修改rotation真的就要善用transform和QuaternionAPI

大概一開始會搞錯的就只有這邊
剩下其實自己摸摸就很容易理解啦

接下來講一下transform的Script
http://docs.unity3d.com/ScriptReference/Transform.html
基本上官方API真的超強,每個變數或函數都會有範例

例如:
transform.Translate(Vector3(0, 0, 1) * Time.deltaTime);
就會讓transform延Z方向移動, 乘Time.deltaTime的理由之後的文章會解釋
這邊先重點看看transform的概念就好

沒有留言:

張貼留言