鼠标控制物体旋转、移动、缩放(Unity3D) |
您所在的位置:网站首页 › unity鼠标左键点击 › 鼠标控制物体旋转、移动、缩放(Unity3D) |
这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战 推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一、前言Unity3D对于鼠标操作物体的旋转、移动、缩放的功能点使用的比较多。 今天就分享如何使用Unity实现鼠标对于物体的旋转、移动、缩放。 效果图:
Input.GetMouseButton(0) 获取鼠标输入,参数为一个int值 为0的时候获取的是左键 Input.GetMouseButton(1) 为1的时候获取的是右键 Input.GetMouseButton(2) 为2的时候获取的是中键(就是那个滑轮) Input.GetMouseButton 鼠标按压 Input.GetMouseButtonUp 鼠标点击 Input.GetMouseButtonDown 鼠标松开 Camera.main.ScreenToWorldPoint 屏幕坐标转化为世界坐标 Quaternion rotation = Quaternion.Euler(0, 0, 0); 欧拉角转化为四元数 三、代码分享 using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseControlModel : MonoBehaviour { //旋转最大角度 public int yMinLimit = -20; public int yMaxLimit = 80; //旋转速度 public float xSpeed = 250.0f; public float ySpeed = 120.0f; //旋转角度 private float x = 0.0f; private float y = 0.0f; void Update() { if (Input.GetMouseButton(0)) { //将屏幕坐标转化为世界坐标 ScreenToWorldPoint函数的z轴不能为0,不然返回摄像机的位置,而Input.mousePosition的z轴为0 //z轴设成10的原因是摄像机坐标是(0,0,-10),而物体的坐标是(0,0,0),所以加上10,正好是转化后物体跟摄像机的距离 Vector3 temp = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10)); transform.position = temp; } else if (Input.GetMouseButton(1)) { //Input.GetAxis("MouseX")获取鼠标移动的X轴的距离 x += Input.GetAxis("Mouse X") * xSpeed * 0.02f; y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f; y = ClampAngle(y, yMinLimit, yMaxLimit); //欧拉角转化为四元数 Quaternion rotation = Quaternion.Euler(y, x, 0); transform.rotation = rotation; } else if (Input.GetAxis("Mouse ScrollWheel") != 0) { //鼠标滚动滑轮 值就会变化 if (Input.GetAxis("Mouse ScrollWheel") < 0) { //范围值限定 if (Camera.main.fieldOfView 2) Camera.main.fieldOfView -= 2; if (Camera.main.orthographicSize >= 1) Camera.main.orthographicSize -= 0.5F; } } } //角度范围值限定 static float ClampAngle(float angle, float min, float max) { if (angle < -360) angle += 360; if (angle > 360) angle -= 360; return Mathf.Clamp(angle, min, max); } }谢谢大家! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |