首页 > 编程知识 正文

Unity 按钮控制物体在XYZ轴旋转指定的角度,旋转按钮控制电机

时间:2023-05-05 13:14:00 阅读:200084 作者:126

先说一下功能:

要求点击按钮,控制物体在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);}}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。