【Unity3D】鼠标拖拽物体实现任意角度自旋转

2020-03-11 10:16:21 浏览数 (1)

Unity3d鼠标拖拽物体实现任意角度自旋转

主要涉及函数

  • Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量
  • Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量

通过勾股定理获取拖拽长度,长度越长旋转越快

在project setting--Input 可以设置

代码分享

代码语言:txt复制
UnityEngine;
System.Collections;

public void startRoate : MonoBehaviour
{
	private bool onDrag = false;  //是否被拖拽//    
	public float speed = 6f;   //旋转速度//    
	private float tempSpeed;   //阻尼速度// 
	private float axisX = 1;
	//鼠标沿水平方向移动的增量//   
	private float axisY = 1;    //鼠标沿竖直方向移动的增量//   
	private float cXY;
	
	void OnMouseDown()
	{
		//接受鼠标按下的事件// 
		axisX = 0f; axisY = 0f;
	}
	void OnMouseDrag()     //鼠标拖拽时的操作// 
	{
		onDrag = true;
		axisX = -Input.GetAxis(“moveX”);
		//获得鼠标增量// 
		axisY = Input.GetAxis(“moveY”);
		cXY = Mathf.Sqrt(axisX * axisX   axisY * axisY); //计算鼠标移动的长度//
		if (cXY == 0f) { cXY = 1f; }
	}
	float Rigid()      //计算阻尼速度//    
	{
		if (onDrag)
		{
			tempSpeed = speed;
		}
		else
		{
			if (tempSpeed > 0)
			{
			tempSpeed -= speed * 2 * Time.deltaTime / cXY; //通过除以鼠标移动长度实现拖拽越长速度减缓越慢// 
			}
			else 
			{
				tempSpeed = 0;
			}
		}
		return tempSpeed;
	}

	void Update()
	{
		// this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World); //这个是是按照之前方向一直慢速旋转
		if (!Input.GetMouseButton(0))
		{
			onDrag = false;
			this.transform.Rotate(new Vector3(axisY, axisX, 0)*0.5f, Space.World);
		}
	}
}

0 人点赞