[unity3d]鼠标拖动and旋转缩放

简介: using UnityEngine;using System.Collections;public class mouseRotateAndScale : MonoBehaviour { GameObject car; //public GameOb...
using UnityEngine;
using System.Collections;

public class mouseRotateAndScale : MonoBehaviour {
	GameObject car;
	//public GameObject light;
	Vector2 p1, p2;//用来记录鼠标的位置,以便计算旋转幅度
	 // 鼠标中间键
    int MouseWheelSensitivity = 5;
    int MouseZoomMin = 18;
    int MouseZoomMax = 90;
    float normalDistance = 60;
	// Use this for initialization
	void Start () {
		car = GameObject.Find("benchi");
		
	}
	
	// Update is called once per frame
	void Update () {
		 //旋转
        if (Input.GetMouseButtonDown(0))
        {
            p1 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标左键按下时记录鼠标位置p1
            
        }
        if (Input.GetMouseButton(0))
        {
            p2 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标左键拖动时记录鼠标位置p2
            if (transform.position.y >= 20 && transform.position.y <= 130)  //控制在20-130之内
            {  
                float dx = p2.x - p1.x;
                
                float dy = (float)0.6 * (p2.y - p1.y);
                //鼠标上下移动
                transform.Translate(-dy * Vector3.up * Time.deltaTime);
                transform.RotateAround(car.transform.position, Vector3.up, dx * Time.deltaTime);
            }
            else if (transform.position.y < 20 && p2.y < p1.y)
            {
                float dx = p2.x - p1.x;

                float dy = (float)0.6 * (p2.y - p1.y);
                //鼠标上下移动
                transform.Translate(-dy * Vector3.up * Time.deltaTime);
                transform.RotateAround(car.transform.position, Vector3.up, dx * Time.deltaTime);
            }
            else if (transform.position.y > 130 && p2.y > p1.y)
            {
                float dx = p2.x - p1.x;

                float dy = (float)0.6 * (p2.y - p1.y);
                //鼠标上下移动
                transform.Translate(-dy * Vector3.up * Time.deltaTime);
                transform.RotateAround(car.transform.position, Vector3.up, dx * Time.deltaTime);
            }
            //下面开始旋转,仅在水平方向上进行旋转
            
            
            
            //else if (transform.position.y < 20)
            //{
            //    transform.position.y = 20.1f;
            //}
            //else if (transform.position.y > 130)
            //{
            //    transform.position.y = 129.9f;
            //}
            //light.transform.RotateAround(car.transform.position, Vector3.up, dx * Time.deltaTime);
        }


        //鼠标滚轮控制场景大小
        // 如果按住滑轮
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            Debug.Log(1);
            Debug.Log(Input.GetAxis("Mouse ScrollWheel"));
           
            if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax)
            {
                normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;
            }

            if (normalDistance < MouseZoomMin)
            {
                normalDistance = MouseZoomMin;
            }
            if (normalDistance > MouseZoomMax)
            {
                normalDistance = MouseZoomMax;
            }
           // transform.Translate(transform.forward * normalDistance);
            transform.camera.fieldOfView = normalDistance;

            
        }

        //后滚
        else if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            Debug.Log(-1);
            if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax)
            {
                normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;
            }

            if (normalDistance < MouseZoomMin)
            {
                normalDistance = MouseZoomMin;
            }
            if (normalDistance > MouseZoomMax)
            {
                normalDistance = MouseZoomMax;
            }
           // transform.Translate(-transform.forward * normalDistance);
            transform.camera.fieldOfView = normalDistance;
        }
	}
}

相关文章
|
11月前
|
缓存 负载均衡 NoSQL
基于木舟平台浅谈surging 的热点KEY的解决方法
【11月更文挑战第13天】本文介绍了木舟平台及Surging框架中热点KEY的概念与解决方案。热点KEY指在缓存或分布式系统中频繁访问的数据键,如电商中的热门商品ID。为避免缓存击穿等问题,文章提出了设置热点数据永不过期、多级缓存架构、缓存预热、限流和降级策略以及分布式系统层面的优化等方法。
148 4
|
Java Linux Shell
Linux后台运行jar程序
【7月更文挑战第23天】
349 1
|
数据可视化 程序员
IDEA插件-Rainbow Variable/IDEA彩色变量
"Rainbow Variable"是一款用于 IntelliJ IDEA 的插件,旨在提高代码中变量的可视化区分度。通过使方法中的参数和变量呈现不同的颜色,提高代码可读性。 插件允许用户自定义颜色,使得在同一个函数内部相同的变量采用相同的颜色,从而避免误用。
2550 0
IDEA插件-Rainbow Variable/IDEA彩色变量
模块功能复用和扩展性
模块功能复用和扩展性 模块功能复用和扩展性是软件工程中的重要概念,主要体现在设计和实现阶段。
248 1
|
机器学习/深度学习 存储 人工智能
Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意
Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意
|
SQL 关系型数据库 MySQL
删库,误清数据怎么办?MySQL数据恢复指南
相信很多同学在面对线上数据库时都畏手畏脚,即使这样都难免手滑,一不小心手一抖就将数据或者是表,库删除。当然一些注重规范的公司,不会给开发人员删除表或者是库的权限,但误删数据是常有的事,那么这种情况发生,我们改怎么办呢?跑路?哈哈,当然删库跑路是句玩笑话,本文就为大家介绍一些数据误删除恢复的办法。
3530 0
|
开发工具
IDEA中的Ctrl+c不好使的问题解决
IDEA中的Ctrl+c不好使的问题解决
1080 1
|
Oracle 关系型数据库 数据库连接
Kingbase国产化数据库数据迁移:oracle11g数据库转库人大金仓数据库实例演示
Kingbase国产化数据库数据迁移:oracle11g数据库转库人大金仓数据库实例演示
643 0
|
Linux
Linux 常用命令-显示文件或目录的磁盘占用量
Linux、显示文件或目录的磁盘占用量
372 0