【转】Unity3D 入门小技巧——鼠标拾取并移动物体

http://blog.csdn.net/sysujackjiao/article/details/69396274

一、鼠标拾取物体的原理

Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下:

1、声明一个观察的摄像机、一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的RaycastHit;

2、将射线Ray定义为从摄像机原点出发并且指向当前鼠标所在的坐标(屏幕坐标);

3、定义碰撞RaycastHit为射线Ray与有碰撞属性的物体的碰撞点。

具体代码实现如下(C#代码):

[csharp] view plain copy

  1. <span style="font-size:10px;">using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class camera : MonoBehaviour
  5. {
  6. public Camera ca;
  7. private Ray ra;
  8. private RaycastHit hit;
  9. // Use this for initialization
  10. void Start()
  11. {
  12. }
  13. // Update is called once per frame
  14. void Update()
  15. {
  16. ra = ca.ScreenPointToRay(Input.mousePosition);
  17. if (Physics.Raycast(ra, out hit))
  18. {
  19. }
  20. }
  21. }</span>

应用一:当鼠标按住不动时,移动被选定物体随鼠标一起移动

[csharp] view plain copy

  1. <span style="font-size:10px;">using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class camera : MonoBehaviour
  5. {
  6. public Camera ca;
  7. private Ray ra;
  8. private RaycastHit hit;
  9. // Use this for initialization
  10. void Start()
  11. {
  12. }
  13. // Update is called once per frame
  14. void Update()
  15. {
  16. if (Input.GetMouseButton(0))
  17. {
  18. ra = ca.ScreenPointToRay(Input.mousePosition);
  19. if (Physics.Raycast(ra, out hit))
  20. {
  21. hit.collider.gameObject.transform.position = ca.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, hit.collider.gameObject.transform.position.z));
  22. }
  23. }
  24. }
  25. }</span>

应用二:当鼠标点击物体时,物体随鼠标一起移动;当鼠标再次点击时,放下物体。

[csharp] view plain copy

  1. <span style="font-size:12px;">using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class camera : MonoBehaviour {
  5. public Camera ca;
  6. private Ray ra;
  7. private RaycastHit hit;
  8. private int flag = 0;
  9. // Use this for initialization
  10. void Start () {
  11. }
  12. // Update is called once per frame
  13. void Update () {
  14. if (Input.GetMouseButtonDown(0))
  15. {
  16. ra = ca.ScreenPointToRay(Input.mousePosition);
  17. if (Physics.Raycast(ra, out hit))
  18. {
  19. if (flag == 0)
  20. {
  21. flag = 1;
  22. } else
  23. {
  24. flag = 0;
  25. }
  26. }
  27. }
  28. if (flag == 1)
  29. {
  30. hit.collider.gameObject.transform.position = ca.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, hit.collider.gameObject.transform.position.z));
  31. }
  32. }
  33. }
  34. </span>

Unity3D鼠标坐标转世界坐标和局部坐标

鼠标坐标转世界坐标和局部坐标:
    Vector3 MousePosition2Local () {
        mousePosition = Input.mousePosition; //获取屏幕坐标
        mouseWorldPos = Camera.main.ScreenToWorldPoint (mousePosition); //屏幕坐标转世界坐标
        mouseLocalPos = transform.parent.transform.InverseTransformPoint (mouseWorldPos); //世界坐标转本地坐标

        return CorrectPos(mouseLocalPos);
    }
时间: 2024-07-31 15:00:46

【转】Unity3D 入门小技巧——鼠标拾取并移动物体的相关文章

Unity3D使用小技巧

原地址:http://unity3d.9tech.cn/news/2014/0411/40178.html 1.Crtl+f摄像机自动适配场景. 2.可以用一个立方体作为底盘. 3.人物角色可以直接引入包,有第一人称和第三人称,已经封装好. 4.光源可以设置投影. 5.3DMax是Z轴向上,而一般游戏引擎是Y轴向上,所以导出的时候一定要注意选择YZ转化的格式(YZ转化选项一定要勾选). 另外,obj格式不支持动画,其实游戏中最常用的格式是"FBX"和"DAE"格式,

Unity3d 杂七杂八小技巧

div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/43987981 用了半年多的Unity3d,零零碎碎的记了点东西,先前记在个人博客里 ,后来网站改版给删了,现在发这吧 都是我实际用过的,至少在某个版本力是杠杠给力的 ,谁用谁知道 1.自定义编辑器

[转] Unity3D使用小技巧

原文地址: http://unity3d.9tech.cn/news/2014/0411/40178.html 1.Crtl+f摄像机自动适配场景. 2.可以用一个立方体作为底盘. 3.人物角色可以直接引入包,有第一人称和第三人称,已经封装好. 4.光源可以设置投影. 5.3DMax是Z轴向上,而一般游戏引擎是Y轴向上,所以导出的时候一定要注意选择YZ转化的格式(YZ转化选项一定要勾选). 另外,obj格式不支持动画,其实游戏中最常用的格式是"FBX"和"DAE"格

Python爬虫简单入门及小技巧

刚刚申请博客,内心激动万分.于是为了扩充一下分类,随便一个随笔,也为了怕忘记新学的东西由于博主十分怠惰,所以本文并不包含安装python(以及各种模块)和python语法. 目标 前几天上B站时看到一部很好玩的番剧,名字<笨女孩>,实际上是由同名的搞笑向漫画动画化的.大家都知道动画一般一周一更,很难满足我们的需求,所以我们就来编写一个爬虫,来爬取漫画咯. 那么本文的目标就是爬取<初音MIX>这部漫画(因为笨女孩我已经爬取过了>_<).这部漫画我记得是小学的时候看的,也是

VS 2010 C#入门操作小技巧

*推荐C#入门教学视频(http://www.51xue8.com/e/DownSys/play/?classid=27&id=6719&pathid=3&jishu=17) VS 2010 C#入门操作小技巧 1.认识VS2010:阅读技术文档或者教学视频对入门帮助很大! (1)添加类库 点击解决方案名称(如12.demo)右键->添加->类->更改类名 (2)利用控件设计界面 常用控件:button/label/textbox/combobox: 具体控件用途

DevStore技术详解:Unity3D编辑器的那些小技巧

摘要:Unity引擎以其上手简单易懂而被广大开发者熟知,却很少有人对Unity编辑器的功能做一个全面细致的了解,一些非常实用的小功能在开发者的日常生活中往往被忽略,但是它的确对我们的工作效率的提升有不小的帮助,跟随小编,细数那些被我们遗漏的小技巧~ 1)锁定Inspector-在inspector面板上方有一个小"锁"图标,点击锁住后可以将inspector面板锁定在当前选择的GameObject上.在你需要大量设置某个GameObject的参数时非常有效(例如为一个数组里添加大量引用

小程序入门经典技巧

小程序入门经典技巧 1:小程序如何设置页面路径?2:小程序如何设置默认页面窗口表现?3:小程序如何设置底部tab表现?4:小程序如何设置网络超时时间?5:小程序如何进行数据绑定? 小程序如何设置页面路径? 小程序如何设置默认页面窗口表现? 小程序如何设置底部tab表现? 小程序如何设置网络超时时间? Q:小程序如何进行数据绑定? https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/data.html   Q:小

GJM : Unity3D - UI - UI边缘流光特效小技巧 [转载]

感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经作者同意必须保留此段声明!如有侵权请联系我删帖处理! 我的博客:http://www.cnblogs.com/GJM6/  -  传送门:[点击前往] 今天给大家说一个做UI特效的小技巧,先来看看效果吧 首先找你们UI组要一个需要制作特效的UI 然后在max里按照UI尺寸创建一个面片 然后UI当作贴图帖上去&

《转》Unity3D研究院之UGUI一个优化效率小技巧

无意间发现了一个小技巧.如下图所示,可以发现UGUI的Image组件的RaycastTarget勾选以后会消耗一些效率,为了节省效率就不要勾选它了,不仅Image组件Text组件也有这样的问题. 一般UI里也就是按钮才需要接收响应事件,那么大部分image和text是是不需要开RaycastTarget的. 但是问题就来了,Unity默认在hierarchy窗口Create->UI->Image .Text的时候就会自动帮我们勾选上RaycastTarget, 一个复杂点的界面至少也300+个