【unity3d學習筆記】unity常用API解析

記錄並解析unity中經常用到的API

1.Camera

1.pixelRect

pixelRect屬性:攝像機渲染區間
此屬性用於設置camera被渲染到屏幕中間的座標位置。pixelRect屬性與rect功能類似,不同的是pixelRect以實際像素大小來設置顯示視口的位置,而rect以單位化方式設置顯示視口的位置。
例設置camera.pixelRect (x0,y0,w,h), x0爲視口右移的像素大小,y0爲視口上移的像素大小,w爲camera.pixelWidth,h的值爲camera.pixelHeight.

2.Mathf

1.PingPong

public static float PingPong(float t,float length)
此方法用於模擬乒乓球的往復運動。設f = Mathf.PingPong (t, h),其中f 、t、h均爲 float值類型。
(1)若h>0,則

  f=|t| % h,        當 |t| % 2h <= h時
  f=h - |t| % h,    當 |t| % 2h > h時

(1)若h<0,則

  f=2h + |t| % |2h|,        當| t | % |2h| <= h時
  f= - |t| % |2h|,    當| t | % |2h| > h時

要想讓物體進行PingPong運動, t 必須是一個不斷改變的值 ,常用Time.time 來當作 t 值。f 會從 0 開始變化到 h ,然後再從 h 變化到0.

3.Rigidbody

1.SweepTest

語法:

public bool SweepTest(Vector3 direction, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal); 
參數 作用
direction 剛體掃過的方向
hitInfo 如果返回true,hitInfo將包含更多關於被擊中位置碰撞體的信息
maxDistance 掃到的長度,默認爲無窮大

2.WakeUp

語法:public void WakeUp( );
功能:此方法用於將剛體從休眠狀態喚醒。要將剛體從休眠狀態喚醒,除了調用此方法以外,在以下四種情況發生時,剛體會被自動喚醒:

  • 其他剛體與休眠中的剛體發生了碰撞
  • 使用關節連接的其他剛體發生了移動
  • 剛體的屬性發生了改變
  • 給休眠中的剛體施加了一個外力

3.OnTriggerXXX和OnCollisionXXX

設現有A、B兩個物體,且A物體正向B移動,B物體保持靜止狀態,如圖所示:

這裏寫圖片描述

詳解:

  • 若A中無Rigidbody組件,則B中無論是否含有Rigidbody組件,A都將穿過B物體,並且A和B腳本中的OnTriggerXXX和OnCollisionXXX方法都不會調用。

  • 若A中含有Rigidbody組件,則B中無論是否含有Rigidbody組件,只要B中含有Collider類組件,A和B腳本中的OnTriggerXXX或OnCollisionXXX方法就會被調用。到底調用哪一種要看A和B物體中的Collider類組件中的IsTrigger是否被選中。總之,要激活OnTriggerXXX或OnCollisionXXX方法必須使移動的物體中含有Rigidbody組件

  • 若A中含有Rigidbody組件,B中含有Collider類組件,當A和B物體中的Collider類組件的IsTrigger都沒有選中時,A和B腳本中(兩個物體)的OnCollisionXXX類的方法就會被調用

  • 若A中含有Rigidbody組件,B中含有Collider類組件,當A和B物體中的Collider類組件的IsTrigger至少有一個被選中時,A和B腳本中(兩個物體)的OnTriggerXXX靜態方法會被調用

4.Transform

1.localPosition

public Vector3 localPosition { get; set; }

此屬性用於設置或返回GameObject在局部座標系中的位置,若無父級對象則和屬性Transform.position返回值相同。

transform.localPosition的值受父級對象lossyScale的影響,當transform.localPosition的值增加1時,transform.position的值的增量不一定是1,而是在相對父級座標系中增加了父級的lossyScale倍大小的值。例如物體cube2的父級是cube1,cube1的父級是cube0,cube1的localScale爲Vector3(c1x,c1y,c1z),cube0的localScale爲Vector3(c0x,c0y,c0z),假設cube0和cube1都沒有發生旋轉,則GameObject對象在世界座標系中的位置爲:
transform.position.x = cube0.localPosition.x+cube1.localPosition.x*c0x+transform.localPosition.x*c1x*c0x;
transform.position.y和transform.position.z與此相同。
當物體cube2的局部座標值localPosition增加Vector3(tx,ty,tz)時,其世界座標值position的增加值分別爲:
_x=tx*c1x*c0x;
_y=ty*c1y*c0y;
_z=tz*c1z*c0z;

5.Vector3

1.RotateTowards

基本語法:public static Vector3 RotateTowards( Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta);
其中參數current爲起始點座標,參數target爲目標點座標,參數maxRadiansDelta爲角度旋轉系數,參數maxMagnitudeDelta爲模長係數。

功能說明:
此方法用於返回從參數current到target的球形旋轉插值向量,此方法可控制插值向量的角度和模長。例如,設有Vector3實例A、B和C,有float類型數值R和L,向量A和B的夾角的弧度爲e,則執行以下程序代碼後
C=Vector3.RotateTowards(A,B,R,L);

  • 當R∈[0,e]時,向量C和A的弧度爲R,即當R從0增加到e時,向量C與A的角度也會線性增加到e。向量C的模長爲向量A的模長加上L的值,即|C|=|A|+L.
  • 當R<0時,向量C會沿着A到B的反向量旋轉。
  • 當R>e時,參數R以e來計算角度,即R大於e時C與B的方向相同。
  • 總之,R值決定了向量C的方向,而L影響了C的模長,無論L取值多少,當R>e時向量C與B的方向總是相同的。
  • 向量A、B和C在同一平面上。

2.Slerp

基本語法:public static Vector3 Slerp(Vector3 from, Vector3 to, float t);
其中參數from爲插值起始點座標,參數to爲插值結束點座標,參數t爲插值係數。
功能說明:此方法用於返回從參數from點到參數to點的球形插值向量。例如,設現有Vector3實例A和B,A ( ax,ay,az), B( bx,by,bz) A和B的夾角爲e,則執行如下代碼後
Vector C = Vector3.Slerp(from,to,t);

  • 當t<=0時,向量C=A;
  • 當t>=1時,向量C=B;
  • 當t從0增加到1時,向量C會從起始點A繞着A*B(即向量A和B的叉乘)的方向勻速移動到向量B,此處的勻速時指角度旋轉的勻速,即向量C與B的夾角k=e*(1-t),這樣便可以確定向量C的方向。而向量C的模長計算公式則爲:
    |C|=ax2+ay2+az2+(bx2+by2+bz2ax2+ay2az2)t
  • 當向量A和B中的某個分量的值都爲0時,比如它們的y軸分量都爲0,即ay=by=0時,則A將繞着y軸在xy平面勻速旋轉向B移動,並且在移動過程中C.y的值始終爲0.
發佈了42 篇原創文章 · 獲贊 63 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章