1. 程式人生 > >Unity的一些基礎性東西

Unity的一些基礎性東西

1.Unity是單執行緒的遊戲引擎,unity的非主執行緒中無法訪問Unity的API,這種限制的原因:遊戲中邏輯更新和畫面更新的時間點要求有確定性,必須按照幀序嚴格保持同步,否則就會出現遊戲中的物件不同步現象。

2.生命週期:我們在自己腳本里寫OnApplicationQuit,OnDisable,OnDestroy三個函式時的執行順序於書寫順序一樣,是因為在OnApplicationQuit裡呼叫了後面兩個函式。

3.center就是你那個模型,或者多個模型聯合起來的外接盒的幾何中心。pivot是模型製作者決定的,Unity內建模型的pivot就是它的幾何中心,所以兩者一樣。而模型如果是用

3ds Max或其它三維工具製作的,就可以把pivot設定到模型的任何位置(在Max中叫做模型的軸),比如可以把它設定到盒子的一個頂點上,或底盤中心。當兩者不在一起的時候,如果設定為center,旋轉的時候位置會跟著改變,如果設定成pivort,旋轉時position則不會改變。

4.gloabl和local,前者顯示的世界座標軸,後者顯示的自己座標軸。

5.persp和ISO,前者是透視模式(3d),後者是正交模式(無論離攝像頭近還是遠都顯示一樣的,2d)。

6.關於物體移動:1.lerp:變速,由起點向終點無限接近。值由大到小2.movetowards:勻速3.Lerp:第三個引數為AnimationCurve 物件的curve.Evaluate(x)值,x為自定義float變數。

public AnimationCurve curve;
//(2)定義x軸變數
private float x;
//(3)定義持續時間

 [Tooltip("持續時間")]
public float duration = 1;

 x +=Time.deltaTime / duration;//備註:x到1相當於物體到達終點         
 //transform.position = Vector3.Lerp(Vector3.zero, target, curve.Evaluate(x));//將數值上的變化 轉換為 座標的變化
 transform.position = Vector3.LerpUnclamped(Vector3.zero, target, curve.Evaluate(x));//將數值上的變轉換為 座標的變化   無上限限制!

7.座標點轉換:local Space ---》 world space 

8.向量相減,方向指向被減數,向量相加,為兩個向量的對角線,運算後得到的向量在世界座標原點。1弧度 = 180 / π 角度,1角度 = π / 180 弧度。 弧度 = 角度數 * π / 180 (角度數* Mathf.Deg2Rad),角度 = 弧度數 * 180 / π(弧度數* Mathf.Rad2Deg)   unity裡Mathf.Sin(弧度數)等引數用的是弧度數。向量的點乘(點積/內積):各分量乘積和,a·b=|a|·|b|cos<a,b>,幾何意義:是一條邊向另一條邊的投影乘以另一條邊的長度.相應元素的乘積的和:v1( x1, y1,z1) * v2(x2, y2,z2) = x1*x2 + y1*y2+z1*z2;注意 : 結果不是一個向量,而是一個標量, a*b = b*a  滿足乘法交換律,Unity應用:1.對於標準化過得向量,點乘結果等於兩個向量的夾角的餘弦值,對於標準化過得向量,方向相同結果為1,垂直為0,完全相反為-1。2.根據點乘的正負值,得到夾角大小範圍,>0,則夾角(0,90)<0,則夾角(90,180),可以利用這點判斷一個多邊形是面向攝像機還是背向攝像機。API:Vector3.Dot(a,b), 單位向量的到的點乘結果換算成的角度在0-180之間(Vector3.Angle(a,b)返回的也是0-180)。向量的叉乘(叉積/外積):定義:c = a x b,其中a b c均為向量,幾何意義是:得到一個與這兩個向量都垂直的向量,這個向量的模是以兩個向量為邊的平行四邊形的面積,v1( x1, y1,z1) x v2(x2, y2,z2) = [y1 * z2 - z1 *y2, z1 *x2 - x1 * z2, x1 *y2 - y1 * x2]。性質1:c⊥a,c⊥b,即向量c與向量a,b所在平面垂直,性質2:模長|c| = |a||b| sin<a,b>。性質3:滿足右手法則, a x b = -b x a,所以我們可以使用叉乘的正負值來判斷a,b的相對位置,即b是處於a的順時針還是逆時針方向,右手法則:右手的四指方向指向第一個向量,屈向叉乘向量的夾角方向(兩個向量夾角方向取小於180°的方向),那麼此時大拇指方向就是叉乘所得的叉乘向量的方向.(大拇指應與食指成九十度)(注意:Unity當中使用左手,因為Unity使用的是左手座標系,從世界座標的原點方向看向a,b是順時針還是逆時針)。unity應用:簡單的說: 點乘判斷角度,叉乘判斷方向。 形象的說: 當一個敵人在你身後的時候,叉乘可以判斷你是往左轉還是往右轉更好的轉向敵人,點乘得到你當前的面朝向的方向和你到敵人的方向的所成的角度大小。UnityAPI:Vector3.Cross(v1, v2).通過單位向量獲得叉乘的向量的模長轉換的角度在0-90度之間,因為模長是絕對值 一定是正的。

9.尤拉角於四元數:尤拉角:eulerAngles使用三個角度來儲存方位。有點:任意三個數字都是合法的,不存在不合法的尤拉角,缺點:對於一個方位,存在多個尤拉角描述,因此無法判斷多個尤拉角代表的位移是否相同,萬向節死鎖:物體沿x軸旋轉±90度,自身座標系z軸於世界座標系y軸重合,此時再沿Y軸或Z軸旋轉,將失去一個自由度,自身座標的Y軸和世界座標的z軸。旋轉為0,全部轉移另一個Z軸或者Y軸。四元數:Quaternion在3D圖形學中代表旋轉,由一個三維向量(x/y/z)和一個標量w組成,取值範圍為-1到1.四元數左乘向量,表示將該向量按照四元數表示的角度旋轉,兩個四元數相乘可以組合旋轉效果。優點:避免萬向節死鎖,缺點:存在不合法的四元數,不建議單獨修改某個值。