我很團結一點,並以創建非game2D應用程序的特殊方式使用它所以我只使用UI元素工作。我正在處理一些我想要做的事情。我有哪個輪之後的手指(或鼠標),但對象不能走出「區域」的對象這裏是我的代碼現在:限制Z軸上物體旋轉的問題
using UnityEngine;
using System.Collections;
public class SteeringWheel : MonoBehaviour
{
public float angleMax = 90.0f;
private float baseAngle = 0.0f;
void OnMouseDown()
{
Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
pos = Input.mousePosition - pos;
baseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg;
baseAngle -= Mathf.Atan2(transform.right.y, transform.right.x) * Mathf.Rad2Deg;
}
void OnMouseDrag()
{
Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
pos = Input.mousePosition - pos;
float ang = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - baseAngle;
Debug.Log("ang1 : " + ang);
ang = Mathf.Clamp(ang, -90, 90);
if (transform.eulerAngles.z >= 89 && transform.eulerAngles.z <= 271)
{
transform.rotation = new Quaternion(transform.rotation.x, transform.rotation.y, 0.7f, transform.rotation.w);
return;
}
transform.rotation = Quaternion.AngleAxis(ang, Vector3.forward);
}
}
,這裏是一個問題的GIF:
http://img15.hostingpics.net/pics/324271Animation.gif
你不小心使用「四元」。在Unity中不要使用「四元數」。只需簡單地設置eulerAngles即可。或者,更容易,只需使用「旋轉」(「RotateAround」也非常方便。)Cordialement, – Fattie
四元數對於3D旋轉非常有用,因此使用它們沒有任何問題。至於旋轉問題,我真的不明白爲什麼你用一個固定的Z值創建一個新的四元數。除非你知道如何正確使用它們,否則你不應該用你自己的X,Y,Z和W值創建你自己的四元數,因爲它們不是歐拉值。嘗試用你已經做過的Angleaxis交換,但用transform.rotation.eulerangles代替 –
@PatrickDahlin我這樣做是因爲如果我不這樣做,當我的光標比90°更遠(在左邊)時,「滑塊」在右側以270°的角度 –