Unity3D物体上下左右旋转(不受物体自身坐标轴影响【万向锁问题解决】)

在这里插入图片描述
直接将代码挂载到需要旋转的物体上,按上下左右键旋转即可;

using UnityEngine;
using System.Collections;

public class SpinObject : MonoBehaviour
{
	public GameObject go;
	
   public  void Start()
    {
		go = new GameObject();//创建父物体
		go.transform.position= transform.position;//将父物体位置与被旋转物体位置
		transform.SetParent(go.transform);//将需要旋转的物体设置为其子物体
		
	}
    
//旋转则直接对父物体其进行旋转操作
	void Update()
	{
		if (Input.GetKey(KeyCode.UpArrow))
		{

			//向上转



			go.transform.Rotate(Vector3.right * Time.deltaTime * 30);

			RotateRefresh();//刷新旋转起始位置




		}
		if (Input.GetKey(KeyCode.DownArrow)) {
			//向下转



			go.transform.Rotate(Vector3.left * Time.deltaTime * 30);
			RotateRefresh();//刷新旋转起始位置
		}


	

		if (Input.GetKey(KeyCode.LeftArrow))
		{
		
			//向左转
			go.transform.Rotate(Vector3.up * Time.deltaTime * 30);
			RotateRefresh();//刷新旋转起始位置
		}
		if (Input.GetKey(KeyCode.RightArrow)){
			
			//向右转
			go.transform.Rotate(Vector3.down * Time.deltaTime * 30);
			RotateRefresh();//刷新旋转起始位置
		}
		
	
			
		

	}
	//刷新旋转起始位置方法(将起始位置重新设置)
	void RotateRefresh() {
		transform.SetParent(go.transform.parent);//将需要旋转的物体拿出父物体
		go.transform.eulerAngles = Vector3.zero;//将父物体旋转值归零
		transform.SetParent(go.transform);//再将需要旋转的物体放入父物体



	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值