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);//再将需要旋转的物体放入父物体



	}

}

猜你喜欢

转载自blog.csdn.net/LCF_CSharp/article/details/120177203