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

相关文章
|
10天前
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
10天前
|
图形学 开发者
unity 从工具栏拖动生成物体
在 Unity 中实现从工具栏拖动生成物体的功能,基于编辑器扩展、事件系统和预制体实例化。通过自定义编辑器窗口、处理鼠标事件(按下、移动、释放)及使用 Instantiate 方法,可实现拖动并生成预制体物体。代码示例展示了如何检测鼠标事件并在指定位置实例化物体。
|
11天前
|
图形学
Unity UGUI实现鼠标拖动图片
在 Unity UGUI 中实现鼠标拖动图片功能,主要涉及事件检测、坐标转换和物体位置更新。根据鼠标移动量更新图片位置。代码示例展示了如何通过这些步骤实现拖动效果。
|
4月前
ThreeJs的场景实现鼠标拖动旋转控制
这篇文章介绍了如何在Three.js中实现通过鼠标拖动来旋转场景中的模型,并提供了实现这一功能的代码示例。
184 0
鼠标控制物体旋转、移动、缩放(Unity3D)
Unity3D对于鼠标操作物体的旋转、移动、缩放的功能点使用的比较多。 今天就分享如何使用Unity实现鼠标对于物体的旋转、移动、缩放。
|
定位技术 图形学
交互式QGraphicsView(平移/缩放/旋转)
简述 Graphics View提供了一个平台,用于大量自定义 2D 图元的管理与交互,框架包括一个事件传播架构,支持场景 Scene 中的图元 Item 进行精确的双精度交互功能。Item 可以处理键盘事件、鼠标按下、移动、释放和双击事件,同时也能跟踪鼠标移动。 和 Google 地图一样,在管理大量 Item 的时候,通常需要 View 具有交互(平移/缩放/旋转)
10513 1
|
C#
WPF动画旋转(3轴同时旋转问题)
原文:WPF动画旋转(3轴同时旋转问题) WPF的资料比较少,做起来不是很方便,之前一直有个XYZ3个轴同时旋转的问题,开始的时候以为通过  this.
1229 0
|
C#
WPF无边框拖动、全屏、缩放
原文:WPF无边框拖动、全屏、缩放 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/lwwl12/article/details/78059361 先看效果 无边框 设置WindowStyle=”None”,窗口无关闭及缩放按钮,但还有黑边;设置AllowsTransparency=”True”,黑边没有了。
2149 0
|
图形学
Unity中的平移 缩放 旋转
Unity中的平移 缩放 旋转 1.最近想实现Unity中的平移 缩放 旋转功能, 类似于Unity编辑器状态下的效果.尝试了好几个方式,效果都有瑕疵,网友们谁有好的实现方式,请教我. 下面是我的一种实现方式: using System.
2280 0

热门文章

最新文章