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);
		}
	}
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值