[Unity]如何快速的換算角度,並旋轉物體角度到目標
常見的寫法思維如下 :
同時補充一下常見的選轉角度寫法
1.
兩種都是針對世界角度進行變更,假使要用子節點的話,就使用
假使是要計算當前目標面向的世界座標的話 可以考慮利用 Quaternion.LookRotation
配合Position.up找到方位角,進而進行轉向
常見寫法如範例 :
//找到方向向量並均化
Vector2 direction = 滑鼠位置(position) - 發射中心(position)
//然後將Vector2的x y值帶入公式
public static float FindDegree(float x, float y){
float value = (float)((Mathf.Atan2(x, y) / Math.PI) * 180f);
if(value <= 0) value += 360f;
return value;
//最後用eulerangles 旋轉角度
transform.eulerangles = Vector3.forward * rotValue
同時補充一下常見的選轉角度寫法
1.
transform.rotation = Quaternion.Euler(new Vector3(0,90,0));2.
transform.eulerAngles = new Vector3(0,90,0);
兩種都是針對世界角度進行變更,假使要用子節點的話,就使用
transform.localEulerAngles = new Vector3(0,90,0);
假使是要計算當前目標面向的世界座標的話 可以考慮利用 Quaternion.LookRotation
public static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up);她可以用兩個目標座標相減後得到的相對座標找到的向量值
配合Position.up找到方位角,進而進行轉向
常見寫法如範例 :
//計算當前方向並轉向
//計算向量值坐標
var direction = WayPoints[currentWP].transform.position - NPC.transform.position;
//用Quaternion.LookRotation找出方向角 再用Quaternion.Slerp 進行轉向
NPC.transform.rotation = Quaternion.Slerp(NPC.transform.rotation, Quaternion.LookRotation(direction), speed *Time.deltaTime );
留言
張貼留言