最近在適應新項目,研究人物移動的相關內(nèi)容,遇到的一些原來不是很熟悉的點裙品。這里記錄一下俗批。
先 記錄一下 pitch, yaw 和roll的圖示
pitch 是圍繞X軸旋轉,也叫俯仰角
yaw 是圍繞Y軸旋轉市怎,也叫偏航角
roll 是圍繞z軸旋轉岁忘,也叫翻滾角
幾個用到的vector函數(shù)
Vector3.Angle 求兩個向量之間的夾角 返回一個float類型的數(shù)
Vector3.Dot(Vector3 lhs, Vector3 rhs); 返回-1~1 當兩個向量夾角超過90度,就變成了負數(shù),小于90度返回正數(shù)。
Vector3.ProjectOnPlane(dir区匠,Vector3.up) 將向量投影到一個平面上干像, dir 是表示要投影的向量, Vector3.up是表示要投影的平面的法線
Vector2.SignedAngle(from,to) 在二維空間里 返回兩個向量的角度驰弄,順時針是正數(shù)麻汰,逆時針是負數(shù)。但是在Unity2018.4里有BUG揩懒,算出來正好是反的什乙。
Quaternion.Euler(Vec3) 這個是比較經(jīng)典的 旋轉函數(shù), 歐拉角(vector3(x,y,z)) 轉四元數(shù)已球, 通過轉出來的值進行旋轉臣镣,防止萬向鎖。 vec3 是一個歐拉角
至于怎么讓物體旋轉起來
var qr = Quaternion.Euler(Vec3)智亮;
_entity.transform.rotation = Quaternion.Lerp(_entity.transform.rotation,qr,Time.deltaTime* RotationSpeed);
// 物體緩動
Time.deltaTime
Unity官方給出的描述是:按照秒來計數(shù)忆某,完成上一幀的時間(只讀)。兩幀之間的間隔阔蛉。通常弃舒,使用這個函數(shù)來產(chǎn)生與游戲幀速率無關的效果。
如果你加上或者減去一個值状原,那你很可能應該乘以Time.deltaTime聋呢。當你乘以它以后,你實質(zhì)上的表達是:我想讓這個物體以每秒鐘10米的速度移動而不是每幀10米颠区。
個人理解 就是 在Update中移動靠幀率削锰,但這個不穩(wěn)定會抖。 在移動的時候 速度 和Time.deltaTime 相乘 就表示成 移動靠時間來驅(qū)動 下面的代碼就表示成 每秒10個位置 不是每幀10個位置毕莱。至于到底怎么實現(xiàn)的那是Unity做的事情器贩。
void Update() {
float translation = Time.deltaTime * 10;
transform.Translate(0, 0, translation);
}