zoukankan      html  css  js  c++  java
  • Unity中实现通过鼠标对物体进行旋转平移缩放

    废话不多说,直接上代码 —— 将下面的代码赋给所需要控制的物体上即可。

    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 <= 100)
                        Camera.main.fieldOfView += 2;
                    if (Camera.main.orthographicSize <= 20)
                        Camera.main.orthographicSize += 0.5F;
                }
                //Zoom in  
                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);
        }
    }
    
    
  • 相关阅读:
    读 《异类》- 作者:[加拿大] 马尔科姆·格拉德威尔 有感
    docker常用操作命令
    MySQL 使用规范
    js 字符串转json对象
    Mybatis 工作原理
    JDBC连接配置
    Java 线程基础
    数组与链表
    Java 内部类
    MySQL 去重
  • 原文地址:https://www.cnblogs.com/ezhar/p/13261871.html
Copyright © 2011-2022 走看看