在unity中用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放

在场景中添加一个Plan,Camera,Directional Light,Cube。添加两个脚本scrollerScirpt(挂在Camera),CubeDragScript(挂在Cube上)。

1.鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如下:

void Update () {
        //鼠标滚轮的效果
        //Camera.main.fieldOfView 摄像机的视野
        //Camera.main.orthographicSize 摄像机的正交投影
        //Zoom out
        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;
        }

}

  2.鼠标实现在场景中拖动物体:

  解决思路就是将世界坐标转换成屏幕坐标,然后计算物体与鼠标之间移动量,循环鼠标被按下操作,得到鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就行了。主要是开启一个协同程序(Corountine)来处理

   主要代码如下:

// Use this for initialization
	void Start ()
	{
	    StartCoroutine(OnMouseDown());
	}

    IEnumerator OnMouseDown()
    {
        //将物体由世界坐标系转换为屏幕坐标系
        Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标
        //完成两个步骤 1.由于鼠标的坐标系是2维,需要转换成3维的世界坐标系
        //    //             2.只有3维坐标情况下才能来计算鼠标位置与物理的距离,offset即是距离
        //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离
        Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
        while (Input.GetMouseButton(0))
        {
            //得到现在鼠标的2维坐标系位置
            Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);
            //将当前鼠标的2维位置转换成3维位置,再加上鼠标的移动量
            Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
            //curPosition就是物体应该的移动向量赋给transform的position属性
            transform.position = curPosition;
            yield return new WaitForFixedUpdate(); //这个很重要,循环执行
        }
    }

  场景截图如下

时间: 2024-10-11 19:23:10

在unity中用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放的相关文章

unity查找场景中所有物体

代码很简单就一句话,至于你想怎么用再往里面加东西就好 //查找场景中所有的物体 foreach (GameObject objj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject))) { Debug.Log(objj.transform.name); } 原文地址:https://www.cnblogs.com/qq2351194611/p/11423827.html

Unity3D NGUI从背包中拖出并在场景中生成物体

http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html 由于游戏需要从背包中拖出武器并在场景中相应的位置生成出来,所以研究了一下这个. 一般来说,在Unity3D开发中如果使用NGUI为游戏做UI,我们的场景和UI并不是使用一个相机进行渲染的,所以从背包中拖出物体并在场景相应的位置生成物体,就会涉及到UICamera和场景摄像机的转换.我在做这个时主要通过打射线来实现坐标转换. 如何创建一个可拖动的UI组件可以参考NGUI中的Exam

向场景中加入光照

向场景中加入光照的4个步骤: 1)为每一个物体的每一个顶点计算法向量,法线确定了物体相对于光源的指向 法线的计算:设向量a(x1,y1,z1).向量b(x2,y2,z2) 则a×b=(x2·y3-x3·y2,x3·y1-x1·y3,x1·y2-x2·y1) 2)创建.选择并定位全部的光源 光源的创建: glLight*()函数能够定义光的一些属性--颜色.位置.方向 定义光时.此族函数最长用的一种形式是: void glLightfv(Glenum light,Glenum pname,TYPE

向场景中添加光照

向场景中添加光照的4个步骤: 1)为每个物体的每个顶点计算法向量,法线确定了物体相对于光源的指向 法线的计算:设向量a(x1,y1,z1),向量b(x2,y2,z2) 则a×b=(x2·y3-x3·y2,x3·y1-x1·y3,x1·y2-x2·y1) 2)创建.选择并定位所有的光源 光源的创建: glLight*()函数可以定义光的一些属性--颜色.位置.方向 定义光时,此族函数最长用的一种形式是: void glLightfv(Glenum light,Glenum pname,TYPE*

Threejs场景中的基本组件

总序 相机:决定哪些东西将要在屏幕上渲染 光源:决定对材质会如何显示和生成阴影的使用 物体: 相机中被渲染的对象 Scene场景的几个方法 Scene.add(object);//往场景中添加物体 Scene.remove(object);//场景中去除物体 Scene.children;//Scene的子对象列表:数组吧,包括相机和光源 Scene.getChildByName()//通过物体的name属性访问该物体 在var cude=-时候可以设定cude.name为"方块1"

在Unity场景中更改天空盒的步骤

一.介绍 目的:在Unity场景中制作一个天空盒. 软件环境:Unity 2017.3.0f3,VS2013. 参考 skybox 二.自制一个天空盒 1,创建一个材质material 2,更改属性为Skybox/6 Sided,并且把六个面的图片都选好 三.修改天空盒 在菜单栏Window属性下,选中Lighting -> settings,会出现下面对话框 修改后效果如下 原文地址:https://www.cnblogs.com/OctoptusLian/p/8932428.html

unity 查找脚本被场景中哪些对象引用

在需要查找的脚本上右键: 在场景中已经显示出所有引用该脚本的对象

Unity 获取场景中所有目标对象(包括不激活的对象)

using UnityEngine; using UnityEditor; using System.Collections.Generic; public class ExampleScript : MonoBehaviour { // 获取场景中所有目标对象(包括不激活的对象)不包括Prefabs: List<T> FindSceneObject<T>(string _SceneName)where T:UnityEngine.Component { List<T>

【Unity】6.2 在VS2015中调试 C# 脚本

分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 这一节先利用GUI显示一个简单的界面(以后还会专门介绍GUI),并解释如何在VS2015中调试C#脚本. 本节例子的运行效果如下: 二.调试C#脚本的方式 有以下方式: (1)利用断点调试.断点设置和取消的办法与在控制台应用程序中利用断点调试C#代码的办法相同. (2)通过Debug类提供的方法在后台输出调试信息.该办法会直接在VS2015输出窗口以及Unity的控制台(Console)中输出调试信息. (3)在Un