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

相关文章
|
1月前
ThreeJs添加拖动辅助线
这篇文章介绍了在Three.js中使用TransformControls组件来添加拖动辅助线,实现对3D模型在不同轴向上进行直观的拖动和平移操作。
63 0
|
1月前
ThreeJs的场景实现鼠标拖动旋转控制
这篇文章介绍了如何在Three.js中实现通过鼠标拖动来旋转场景中的模型,并提供了实现这一功能的代码示例。
84 0
|
Windows 容器
一款简单的缩放拖拽图片控件
本文介绍一个针对 .NET 桌面应用程序的独立图片缩放拖拽显示控件 [SQPhoto](https://www.nuget.org/packages/SQPhoto/)。
200 0
一款简单的缩放拖拽图片控件
鼠标控制物体旋转、移动、缩放(Unity3D)
Unity3D对于鼠标操作物体的旋转、移动、缩放的功能点使用的比较多。 今天就分享如何使用Unity实现鼠标对于物体的旋转、移动、缩放。
|
移动开发 前端开发 JavaScript
Canvas之鼠标滑动特效
Canvas之鼠标滑动特效
239 0
Canvas之鼠标滑动特效
|
C#
WPF动画旋转(3轴同时旋转问题)
原文:WPF动画旋转(3轴同时旋转问题) WPF的资料比较少,做起来不是很方便,之前一直有个XYZ3个轴同时旋转的问题,开始的时候以为通过  this.
1222 0
|
前端开发 C#
WPF多点触摸放大缩小旋转
原文:WPF多点触摸放大缩小旋转 版权声明:本文为博主原创文章,需要转载尽管转载。 https://blog.csdn.net/z5976749/article/details/40118437 如果要方法缩小一个canvas,或图片: 只要在控件中添加    就可以拉伸改控件。
1607 0
|
C#
WPF无边框拖动、全屏、缩放
原文:WPF无边框拖动、全屏、缩放 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/lwwl12/article/details/78059361 先看效果 无边框 设置WindowStyle=”None”,窗口无关闭及缩放按钮,但还有黑边;设置AllowsTransparency=”True”,黑边没有了。
2110 0
|
图形学
Unity中的平移 缩放 旋转
Unity中的平移 缩放 旋转 1.最近想实现Unity中的平移 缩放 旋转功能, 类似于Unity编辑器状态下的效果.尝试了好几个方式,效果都有瑕疵,网友们谁有好的实现方式,请教我. 下面是我的一种实现方式: using System.
2257 0