1. 程式人生 > 其它 >Unity 按鈕控制物體在X,Y,Z軸旋轉指定的角度

Unity 按鈕控制物體在X,Y,Z軸旋轉指定的角度

先說一下功能:
在這裡插入圖片描述
要求點選按鈕,控制物體在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); } }