using UnityEngine;
using System.Collections;public class DragObject : MonoBehaviour
{/// <summary>/// 将要拖动的物体/// </summary>private Transform _dragGameObject;/// <summary>/// 获取射线需要碰撞的层/// </summary>private LayerMask _canDrag;/// <summary>/// 直接从外部定义好层,简单理解/// </summary>public LayerMask canDrag2;/// <summary>/// 获得鼠标的位置和cube位置差/// </summary>private Vector3 _offset;/// <summary>/// 是否点击到cube/// </summary>private bool _isClickCube;/// <summary>/// 目标对象的屏幕坐标/// </summary>private Vector3 _targetScreenPoint;//限制拖动范围的最小值和最大值public float xMin, xMax, zMin, zMax;// Use this for initializationprivate void Start(){_canDrag = 1 << LayerMask.NameToLayer("Player");}// Update is called once per frameprivate void Update(){if (Input.GetMouseButtonDown(0)){if (CheckGameObject()){_offset = _dragGameObject.transform.position -Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y,_targetScreenPoint.z));}}if (_isClickCube){//当前鼠标所在的屏幕坐标Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _targetScreenPoint.z);//把当前鼠标的屏幕坐标转换成世界坐标Vector3 curWorldPoint = Camera.main.ScreenToWorldPoint(curScreenPoint);_dragGameObject.position = curWorldPoint + _offset;//限制拖动范围_dragGameObject.GetComponent<Rigidbody>().transform.position = new Vector3(Mathf.Clamp(_dragGameObject.GetComponent<Rigidbody>().transform.position.x, xMin, xMax),1.0f,Mathf.Clamp(_dragGameObject.GetComponent<Rigidbody>().transform.position.z, zMin, zMax));}if (Input.GetMouseButtonUp(0)){_isClickCube = false;//恢复拖拽物体的Y轴为原点_dragGameObject.GetComponent<Rigidbody>().transform.position = new Vector3(_dragGameObject.GetComponent<Rigidbody>().transform.position.x, 0,_dragGameObject.GetComponent<Rigidbody>().transform.position.z);}}/// <summary>/// 检查是否点击到cbue/// </summary>/// <returns></returns>private bool CheckGameObject(){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitInfo;if (Physics.Raycast(ray, out hitInfo, 100f, _canDrag)){_isClickCube = true;//得到射线碰撞到的物体_dragGameObject = hitInfo.collider.gameObject.transform;_targetScreenPoint = Camera.main.WorldToScreenPoint(_dragGameObject.position);return true;}return false;}
}

把该脚本挂到相机上,还有把需要拖动的物体的Layer修改成“Player”即可。没有Player的添加一下

Unity鼠标拖动3D物体移动,并限制拖动范围相关推荐

  1. GJM:Unity开发HTC vive 三、远处拖动3D物体 【转载】

    腾讯GAD  窗间风月 原文URL : http://gad.qq.com/article/detail/7192223 版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 在项目中会需要拖动远处的 ...

  2. 【Unity3D】材质 Material ( 材质简介 | 创建材质 | 设置材质属性 | 对 3D 物体应用材质 | 资源拖动到 Inspector 检查器中的 Material 属性中 )

    文章目录 一.材质 Material 简介 二.创建材质 三.设置材质属性 四.对 3D 物体应用材质 五.资源拖动到 Inspector 检查器中的 Material 属性中 一.材质 Materi ...

  3. Unity 建立的3D物体 导成 Maya能识别的obj文件

    目录: Step1 建立核心脚本 Step2 找到导出按钮 Step3 选中层级视图中要导出3D物体,点击导出按钮,如"Wavefront OBJ"(略) 后记 Step1 建立核 ...

  4. Unity 用鼠标拖动3D物体 跟随鼠标移动

    public class MouseMove : MonoBehaviour {//鼠标经过时改变物体颜色private Color mouseOverColor = Color.blue;//声明变 ...

  5. unity 通过鼠标让3D物体在xyz三个轴移动

    工具 unity2018 vs2017 资源:要移动的模型 ,一个三维坐标轴 结果(暂时没找到办法放本地录屏,就先放图了): 通过鼠标拖动xyz三个轴,实现物体在三维空间的移动(可以是本地坐标也可以是 ...

  6. Unity 2D及3D物体随鼠标转向的方法(类似孤胆枪手效果)

    首先明确效果,如孤胆枪手那样任务随鼠标方向转向的效果 要实现此效果我们首先要知道鼠标的位置 话不多说直接上代码 Vector3 point = Input.mousePosition;//注意,此时的 ...

  7. Unity如何实现3D物体拆解组装

    一.前言 最近有一个需求,是做一个发动机的拆卸和安装功能,其实是一个很简单的功能,但是其中有一个点我觉的非常有意思,就是拖拽组装时,物体如何精准拖到目标位置,思路有了,但是我一直找不到实现方式,早晨刷 ...

  8. unity中实现3d物体的颜色随时间渐渐消失

    实现的原理就是修改material的color属性的Alpha值,通过把值逐渐变为0来达到消失 注意:这种方法只对部分shader有作用,我用的是 下面是代码: using System.Collec ...

  9. unity UI 跟随3D物体移动

    using System.Collections; using System.Collections.Generic; using UnityEngine;public class UIFollow3 ...

最新文章

  1. c语言字符串数组分配没错,【字符串数组面试题】面试问题:C语言基础小结… - 看准网...
  2. 当一个解决方案下面有多个项目时,如果设置启动项?
  3. 生产订单结算KKS1常见错误
  4. 数据迁移,不停机上线的正确姿势
  5. 信息学奥赛一本通(1085:球弹跳高度的计算)
  6. ACM PKU 1111 Image Perimeters http://acm.pku.edu.cn/JudgeOnline/problem?id=1111
  7. Linux 系统下 /etc/group 档案结构
  8. (详解)11年真题:求两个序列合并后的的中位数
  9. C++实现设计模式——Builder模式
  10. 汽车操作系统最新研究
  11. 你一生要知道的74幅世界名画…
  12. 如何免费将一个PDF拆分成多个文件?
  13. WORD 2007删除尾注横线
  14. appium2.0+ 单点触控和多点触控新的解决方案
  15. 读书,什么时候能改变命运
  16. 360度全景标定方法_基于IMU辅助的360度全景视图多相机标定方法与流程
  17. 数据库(mysql)之事务和存储引擎
  18. vue-router使用详解
  19. Hashkey邓超:投资数字金融的三大逻辑和三大视角(全文)
  20. 大规模量产上车!明星自驾公司鉴智机器人火热招聘中(算法/规控/软件/产品海量岗位来袭)...

热门文章

  1. 无线 WiFi 网络状态监测与感知分析
  2. AC+AP的无线网络配置
  3. 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现
  4. 微信公众号JS-SDK开发
  5. 什么是原子性,什么是原子性操作
  6. snprintf函数的用法
  7. 揭秘eBay四大系统 从行为数据中寻找价值
  8. IF 19.865代谢组学高分文章,非靶标代谢流助力揭示18SrRNA中m6A控制肝癌机制!
  9. mysql 年龄段分组_SQL语句查询年龄分段分组查询
  10. Latent Dirichlet Allocation