unity3D中物体实现任意角度自旋转

主要涉及函数:

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

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

通过勾股定理获取拖拽长度,长度越长旋转越快。在project setting--Input 可以设置。

这里用Cube来做例子,因为方体看旋转比较清楚,如图:

unity3D中物体实现任意角度自旋转_第1张图片

代码如下:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : 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); 
		}
	}
}

最终效果如图:

unity3D中物体实现任意角度自旋转_第2张图片


unity3D中物体实现任意角度自旋转_第3张图片

你可能感兴趣的:(unity3D,Unity3D)