Unity 按鈕控制物體在X,Y,Z軸旋轉指定的角度
阿新 • • 發佈:2021-02-15
先說一下功能:
要求點選按鈕,控制物體在X軸,Y軸,Z軸緩動旋轉指定的角度(世界軸);
網上關於物體旋轉的方法非常多,但大都是單一軸旋轉,或指定的角度旋轉比如:(Vector3.up 或(0,90,0));
由於旋轉的坑太多,會發現將程式碼套用在我們的需求下後產生一種問題,即在單一軸旋轉時其他兩個軸的旋轉角度為0時則旋轉無誤,如果有一個軸的旋轉角度不為0時,旋轉很容易出現問題。
請教了一個大佬有一下程式碼奉上,親測可用;
public Transform target;
public Button xPositive;
public Button xNegative;
public Button yPositive;
public Button yNegative;
public Button zPositive;
public Button zNegative;
public float speed;
private Vector3 _axis;
private int _angle;
private float _percent; // [0,1]
private void Start()
{
xPositive.onClick.AddListener(() => { if (_percent >= 1f) { _percent = 0f; _axis = Vector3.right; _angle = 90; } });
xNegative.onClick.AddListener(() => { if (_percent >= 1f) { _percent = 0f; _axis = Vector3.right; _angle = -90; } });
yPositive.onClick.AddListener(() => { if (_percent >= 1f) { _percent = 0f; _axis = Vector3.up; _angle = 90; } });
yNegative.onClick.AddListener (() => { if (_percent >= 1f) { _percent = 0f; _axis = Vector3.up; _angle = -90; } });
zPositive.onClick.AddListener(() => { if (_percent >= 1f) { _percent = 0f; _axis = Vector3.forward; _angle = 90; } });
zNegative.onClick.AddListener(() => { if (_percent >= 1f) { _percent = 0f; _axis = Vector3.forward; _angle = -90; } });
}
private void Update()
{
if (_percent < 1f)
{
float delta = speed * Time.deltaTime;
_percent += delta;
float tmp = _percent - 1f;
if (tmp > 0)
{
delta -= tmp;
}
target.Rotate(_axis, _angle * delta,Space.World);
}
}