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);
		}
	}
  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
要让物体心的z旋转指定角度,可以使用物体的Transform组件的RotateAround方法进行旋转。具体实现步骤如下: 1. 确定旋转心的位置和旋转的方向。在本例,我们假设要绕旋转物体是一个立方体,心位于立方体的心点,旋转的方向为z正方向。 2. 在脚本定义要旋转角度。可以使用一个公共变量来保存该角度值。 3. 在Update方法,使用物体的Transform组件的RotateAround方法进行绕旋转。在该方法,需要传入旋转心的位置、旋转的方向和旋转角度等参数。 以下是一个示例代码: ```csharp public class RotateZAxis : MonoBehaviour { public Transform pivot; // 旋转心 public float angle = 45f; // 旋转角度 void Update() { // 绕旋转 transform.RotateAround(pivot.position, Vector3.forward, angle * Time.deltaTime); } } ``` 在该示例代码,我们使用了Vector3.forward来表示z正方向。后,在Update方法,使用物体的Transform组件的RotateAround方法进行绕旋转。其,pivot表示旋转心的Transform组件;Vector3.forward表示旋转的方向;angle表示旋转角度。通过修改这些参数,可以实现不同的旋转效果。 需要注意的是,在进行绕旋转时,物体的位置也会随着旋转而发生变化。如果需要保持物体的位置不变,可以在进行旋转前记录物体的初始位置,并在旋转后将物体的位置还原为初始位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值