前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Unity3D】鼠标拖拽物体实现任意角度自旋转

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

原创
作者头像
恬静的小魔龙
修改2020-03-11 10:16:21
4.3K1
修改2020-03-11 10:16:21
举报
文章被收录于专栏:Unity3DUnity3D

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

主要涉及函数

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

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

在project setting--Input 可以设置

代码分享

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);
		}
	}
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Unity3d鼠标拖拽物体实现任意角度自旋转
    • 主要涉及函数
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档