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

本文实例为大家分享了unity3D实现物体任意角度自旋转的具体代码,供大家参考,具体内容如下

主要涉及函数:

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

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

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

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

代码如下:

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实现物体任意角度自旋转 的全部内容, 来源链接: utcz.com/z/347787.html

回到顶部