【Unity3D鼠标交互】(一)鼠标拖拽物体实现任意角度自旋转

举报
恬静的小魔龙 发表于 2021/10/24 18:16:15 2021/10/24
【摘要】 推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 Unity3d鼠标拖拽物体实现任意角度自旋转 主要涉及函数Input.GetAxis("Mouse X");//可取得鼠标横向(x轴)移动增量Input.GetAxis("Mouse Y");//可取得鼠标竖向(y轴)移动增量 效果图 代码分享using UnityEngine;p...

推荐阅读

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

主要涉及函数

Input.GetAxis("Mouse X");//可取得鼠标横向(x轴)移动增量
Input.GetAxis("Mouse Y");//可取得鼠标竖向(y轴)移动增量

效果图

在这里插入图片描述

代码分享

using UnityEngine;

public class 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("Mouse X");
		//获得鼠标增量 
		axisY = Input.GetAxis("Mouse Y");
		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); 
	}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。