关闭

unity3d鼠标点击,获取世界坐标

177人阅读 评论(0) 收藏 举报

unity中有关于鼠标位置的函数,Input.mousePosition。但不得不说,这个函数不到位,可以用一个print函数输出一下这个坐标会发现,只有X,Y值在改变,Z值没有发生变化,并且在屏幕的左下角固定为(0,0,0),查看文档后发现,文档上是这么写的。

The current mouse position in pixel coordinates. (Read Only)

当前所在像素坐标的鼠标位置(只读)。

The bottom-left of the screen or window is at (0, 0). The top-right of the screen or window is at (Screen.width,Screen.height).

屏幕或窗口的左下角是坐标系的(0,0)坐标。右上角的坐标是(屏幕宽度值,屏幕高度值)。

即我们得到的坐标是其实是摄像机显示画面的坐标,就是我们屏幕的坐标,我直接就纠结了,这怎么办?

在近1个小时的文档查看过程中还是没有找到有关鼠标位置的函数,但是偶然间看到了一个射线的方法

原来是用这种方式做的啊!!

找到目标后开始研究这个射线函数,霍霍,ScreenPointToRay这个太到位了!

 

Returns a ray going from camera through a screen point.

返回一条射线从摄像机通过一个屏幕点。

Resulting ray is in world space, starting on the near plane of the camera and going through position's (x,y) pixel coordinates on the screen (position.z is ignored).

产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)。

Screenspace is defined in pixels. The bottom-left of the screen is (0,0); the right-top is (pixelWidth,pixelHeight).

屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight)。

 

 这就明白了,函数给我们的是一条射线,起点是摄像机,且射线过屏幕上的一点,屏幕上的点不就是mousePosition吗,解决了!

c#

  if (Input.GetMouseButton(0)) {
   //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   Ray ray = camera.ScreenPointToRay(Input.mousePosition);

上面注释掉的函数:当你的脚本没有绑在mainCamera上时,又想用MainCamera做原点是使用。

接下来我们来试一下效果到底行不行,继续写void Update()

//这段代码是我照文档改的,自己似懂非懂,请各位读者指点

RaycastHit hit;//

if(Physics.Raycast(ray, out hit))//函数是对射线碰撞的检测,这个out是什么意思?
   {
     Point = hit.point;//得到碰撞点的坐标
    print (Point);//输出一下
    print("I'm looking at " + hit.transform.name);//输出碰到的物体名字
   }

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

unity3d鼠标点击,获取世界坐标

unity中有关于鼠标位置的函数,Input.mousePosition。但不得不说,这个函数不到位,可以用一个print函数输出一下这个坐标会发现,只有X,Y值在改变,Z值没有发生变化,并且在屏幕的左下角固定为(0,0,0),查看文档后发现,文档上是这么写的。 The current mou...
  • feizxiang3
  • feizxiang3
  • 2014-07-04 02:38
  • 36429

解决Unity鼠标坐标点转成世界坐标系坐标点

第一种: 这是一种发射线,获取当前点击的物体(具有碰撞器)的坐标点(也就是碰撞器范围的坐标点)  if (Input.GetMouseButtonDown(0))         {  ...
  • leoysq
  • leoysq
  • 2016-12-06 10:20
  • 3772

[unity3d]navmesh 自动寻路 鼠标点击的坐标获取 鼠标点击的世界坐标

问题起因:下载里一套unity3d rpg的源码,
  • hhkun0120
  • hhkun0120
  • 2014-09-22 20:53
  • 1663

unity 2d 四大坐标系问题 鼠标点击位置问题 详细入门解析

unity2d中的camera有四大坐标系你需要了解清楚,本文还介绍了如何获取鼠标位置/如何实现点击哪里就在哪里生成一个新物体/获取点击位置/点击位置转换,代码解释详尽,可以提问,入门级文章。
  • yanzhanyi
  • yanzhanyi
  • 2014-07-28 20:25
  • 7767

【Unity3D】判断是否鼠标点击物体与血条制作

血条是在游戏中非常常见的东西,和Cocos2dx中《【Cocos2dx】利用音量螺旋控件控制血量条 》(点击打开链接)一样,Unity3D的血条也其实就是用一个slider就能做完的事情。同时,本文也将继《【Unity3D】用鼠标点击事件、AddForce完成跳跃与二段跳》(点击打开链接)...
  • yongh701
  • yongh701
  • 2017-04-20 21:18
  • 2561

Unity3D通过鼠标点击拖动获取屏幕范围

作为一个新人,我也来发表一篇文章,大早上的通过unity3d来给大家分享一下我自己做的小demo; 首先获取鼠标在屏幕上点击的那个点的坐标,在这里要用到input类中的MouseButtonDown()这个方法来获得鼠标的左键,右键已经滚轮的点击反应。 今天我们就用左键吧,在MouseB...
  • KathyKarol
  • KathyKarol
  • 2016-12-16 10:59
  • 1069

Unity3D小白学习日记(01):如何把物体移动到鼠标点击处

本文是小白的第一篇博客,因为是初学所以难免有不妥之处,还请前辈们指点迷津~
  • weixin_37658157
  • weixin_37658157
  • 2017-07-26 20:00
  • 416

Unity: Unity3D 模拟鼠标单击/双击

该文来自:http://www.omuying.com/article/123.aspx 功能代码: using UnityEngine; using System.Collections; public class MouseResponseManager { public static vo...
  • zhangbp
  • zhangbp
  • 2016-03-10 11:26
  • 2790

Unity知识一:简单的点击事件

用Unity做项目,不可避免的要用鼠标或者手指去点击,但是点击的时候我们怎么判断我点到了什么了呢? 点击的实现方法有很多种,我们就由浅入深,先介绍简单的。 射线点击事件的思路是:当我鼠标按下的时候,从摄像机往鼠标的方向发射出一条射线。如果该射线被某游戏物体挡住了,那么我们就说现在鼠标就点击在这个...
  • StandFull
  • StandFull
  • 2016-02-17 22:05
  • 9166

【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转

using UnityEngine; using System.Collections; public class ModelRotationScript : MonoBehaviour { public GameObject model; //目标物体 public Camera my...
  • u011601165
  • u011601165
  • 2017-01-12 21:32
  • 2303
    个人资料
    • 访问:33461次
    • 积分:401
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:40篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档