1、Vector3
首先聲明:Unity中點和向量都用Vector3表示!
再來看其是如何定義的:
由上圖可知Vector3是個struct(結構體),有 x , y , z 3個座標!
Vector3“.”出的常見東西
- Vector3.forward:(0, 0, 1)
- Vector3.back:(0, 0, -1)
- Vector3.up:(0, 1, 0)
- Vector3.down:(0, -1, 0)
- Vector3.right:(1, 0, 0)
- Vector3.left:(-1, 0, 0)
兩點間距離
float distance = Vector3.Distance( point1, point2 );
單位向量(Vector3對象.normalize()與Vector3.Normalize()的區別)
void Start(){
Vector3 v = new Vector3(4,5,6);
Vector3 r;
r = Vector3.Normalize(v);//將v向量的單位向量賦給向量r(v本身沒有變)
Debug.Log("v"+ v);
v.Normalize();//將v向量本身單位化
Debug.Log("v"+ v);
Debug.Log("r"+ r);
}
打印如下
線性插值
Vector3.Lerp(Vector3 from , Vector3 to , float t)
會返回一個當前位置的Vector3
from : 起點
to : 終點
t : 百分比
例如:
t=0.1時表示 每幀會從起點向終點移動當前相差距離的10%(即從快到慢的速度移動)
注:線性插值會使得移動更平滑
2、Transform
Transform與transform的區別:
Transform泛指所有遊戲對象的基本組件,也是一個基礎類!
transform則是Transform這個類所創建的對象,亦是指當前對象的Transform組件!
transform“.”出的常見東西
屬性:
- transform.forward
- transform.up
- transform.right
注:並沒有.back、.down、.left什麼的!
移動:
- transform.Translate(x , y , z);//朝向量(x , y , z)的方向移動,向量的長度就是移動速度!
- int moveSpeed = 10;//也可指定速度
transform.Translate( (new Vector3(x, y, z))* moveSpeed ); - transform.Translate( Vector3.forward , Space.Self );
transform.Translate( transform.forward, Space.World );
//這兩個雖然都是朝物體正前方移動,但是第一個方法中第一個參數Vector3.forward是絕對向量(絕對方向和絕對大小),默認是自身座標空間中的向量!第二個參數默認是Space.self(物體座標系)。
第二個方法終點transform.forward則是物體本身的前方(物體座標系),描述的是這個物體座標系中的向量在世界座標系中的向量!第二個參數必須是Space.World(世界座標系) !
旋轉
- transform.Rotate( 0, 0.5f, 0 );//繞着自身的某個軸旋轉
- transform.RotateAround( Vector3.Zero, Vector3.Up, 0.5f );//繞着特定的某個軸旋轉,繞原點朝上的方向進行旋轉,每次旋轉0.5度。
縮放
- transform.localScale
朝向
- transform.LookAt()
位置
- transform.position//在世界座標系中的位置
- transform.localPosition//相對於父物體的位置
- 作用
- transform.childCount//獲取子物體的數量
- transform.GetChild( index );//根據索引取得子物體
3、Time
Time是一個只讀屬性的類
Time”.”出的東西
- Time.deltaTime//距離上一幀所經歷的時間
- Time.time//從遊戲開始到你調用的時候所經歷的時間
- Time.fixedDelTime//固定更新時間
- Time.fixedTime//固定時間以定期間隔更新(相當於fixedDeltaTime)直到達到time屬性。
- Time.smoothDeltime//平滑的deltaTime
- Time.frameCount//從遊戲開始到目前所經歷的幀數(可計算平均幀率=frameCount/time)
- Time.timeScale//時間縮放,默認是1(設爲0是暫停,1.2相當於加快了遊戲速度)
Time.realTimeSinceStartUp//不受timeScale影響
可通過下面代碼在運行窗口中顯示
void OnGUI()
{
GUILayout.Label("deltaTime:" + Time.deltaTime);
}
還可用來規避不同設備幀率的問題:
假設:
速度快的設備:1S跑10幀 Time.deltaTime爲0.1
速度慢的設備:1S跑1幀 Time.deltaTime爲1
則移動距離=5m/幀(移動速度)*Time.deltaTime(距離上一幀的時間)
速度快的和速度慢的設備在1S內移動的距離都爲:5m
5 * 0.1 * 10
5 * 1 * 1