当前位置: 首页 > 编程日记 > 正文

Unity UGUI获取鼠标在屏幕的准确点击位置

想要获取鼠标在屏幕的准确点击位置,千万不要胡乱写,什么转化坐标系,什么Ray射线检测都是浮云。

1,转化坐标系只是相对而言,并不能准确实现当前鼠标点击在屏幕的位置;

2,Ray检测,hit是需要碰撞的,没碰撞,获取的是什么??(0,0,0)。

所以,请看如下正解。

第一种:

我用坐标系转化时发现值并没有什么变化,网上乱七八糟的都有。

其实很简单,Input.mousePosition本身就是屏幕坐标(二维),

不能直接使用是因为,屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight),

或者说以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height)

而屏幕的基准点在屏幕中心(Screen.width/2,Screen.height/2),需要减掉二分之一坐标值,也就是减去二分之一屏幕的宽、高。

将基准点放置屏幕的左下角,即基准点为(0,0).

此时m_panel的屏幕坐标就对应到tranPos的x、y值。

Transform(RectTransform)  m_panel;

float X = Input.mousePosition.x - Screen.width / 2f;
float Y = Input.mousePosition.y - Screen.height / 2f;
Vector2 tranPos = new Vector2(X,Y);
m_panel.localPosition = tranPos;

注意:需要考虑m_panel的锚点,举例说明:可以这么说,锚点对应坐标中心点。

第二种:使用 RectTransformUtility.ScreenPointToLocalPointInRectangle 方法。

我这里的UICamera是单独检测UI层的相机,可以是MainCamera,如果没有摄像机(即Canvas   --Overlay),则相机为null。

public Vector2 CurrMousePosition(Transform thisTrans)
{
Vector2 vecMouse;
RectTransform parentRectTrans = thisTrans.parent.GetComponent<RectTransform>();
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTrans, Input.mousePosition, UICamera, out vecMouse);
return vecMouse;
}

另,获取鼠标的世界坐标: 鼠标在世界坐标下的位置,鼠标位置从屏幕坐标转化为世界坐标

转载于:https://www.cnblogs.com/yanghui0702/p/yanghui20180521.html

相关文章:

Numpy学习笔记(下篇)

目录 Numpy学习笔记&#xff08;下篇&#xff09;一、Numpy数组的合并与分割操作1、合并操作2、分割操作二、Numpy中的矩阵运算1、Universal Function2、矩阵运算3、向量和矩阵运算三、Numpy中的聚合操作四、Numpy中的arg运算1、索引操作2、排序和索引使用五、Fancy Indexing六…

VC串口通信编程-2

VC串口通信编程 (2009-07-08 13:48:40) 转载▼Win32串口编程&#xff08;转&#xff1a;韩耀旭&#xff09;  在工业控制中&#xff0c;工控机&#xff08;一般都基于Windows平台&#xff09;经常需要与智能仪表通过串口进行通信。串口通信方便易行&#xff0c;应用广泛。一般…

【bootstrap】如何解决页面缩小后上方导航栏格式变化的问题

问题描述&#xff1a; bootstrap官方模板中上方导航栏当缩小到一定程度后会发生格式的变化&#xff0c;但我想取消这种变化 页面缩小前&#xff1a; 页面缩小后&#xff1a; 解决方法&#xff1a; 经过阅读bootstrap的css代码后发现了这么一行代码&#xff1a; 将其删除后问…

ASIHttpRequest使用前的配置

ASIHttpRequest使用前的配置 1、从以下地址获取ASIHttpRequest相关资源文件&#xff1a; Github project page: http://github.com/pokeb/asi-http-request/tree Download the latest version: http://github.com/pokeb/asi-http-request/tarball…

当面试官问这些基础的Python问题时,竟然还有80%的人不会!

怎样才能开始一个交互式解释器的会话&#xff1f; 在Windows下可以通过点击开始按钮&#xff0c;选择“程序”&#xff0c;点击“Python”&#xff0c;然后选择“Python&#xff08;command line&#xff09;”菜单选项来开始一个交互会话。 你应该在哪里输入系统命令行来启动一…

xcode 4.3.2 use storyboard创建TableView

xcode 4.3.2 use storyboard 使用TableView&#xff0c;显示一个颜色列表&#xff0c;表格包括一张图片&#xff0c;一个文本&#xff0c;一行副文本。 TableView 呈现列表格式的数据&#xff0c;每一行是一个UITableViewCell对象&#xff0c;每个UITableViewCell可以显示文本标…

VScode 插件、配置记录

常用插件&#xff1a; Chinese&#xff08;Simplified&#xff09;pythonTabNineSettings Sync 配置&#xff1a; 外观设置为&#xff1a; Solarized Dark 转载于:https://www.cnblogs.com/yeran/p/11284772.html

【jqgrid】疑难杂症及解决方法(随缘更新)

最近在学习使用jqgrid&#xff0c;由于初次使用就要应用的工程的开发当中&#xff0c;还是遇到了不小的麻烦&#xff0c;在此梳理遇到的问题及解决方法。 遇到问题&#xff1a; 1、如何解决翻页键不好用的问题 2、如何调整grid的宽度和高度 3、当grid宽度超过页面的宽度之后…

vcenter converter 转换xenserver下linux的错误

需求&#xff1a;需将xenserver5.6上的一台ubuntu迁移到ESXi 4.1.0上面 首先部署一台vmware vcenter converter standalone,具体步骤省略&#xff0c;到99%时出现错误: 无法重新配置目标虚拟机。 检查日志,发现这么一句话&#xff1a; (converter.fault.CloneFault) { dynamicT…

使用xml布局菜单

目前为止我们都是通过硬编码来增加菜单项的&#xff0c;android为此提供了一种更便利的方式&#xff0c;就是把menu也定义为应用程序的资源&#xff0c;通过android对资源的本地支持&#xff0c;使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响…

Prevent Crow's Feet

来源&#xff1a;http://www.howbeauty.org/anti-aging/223424.htm Wear a sunscreen with an SPF of at least fifteen that blocks both UVA and UVB rays whenever you go outside. Be sure to apply it to your eyelids and under your eyes.Wear sunglasses when youll be…

【css】如何使光标移动到某个区域后改变形状

问题描述&#xff1a; 当光标移动到页面的某个位置的时候需要使其改变形状&#xff0c;如变成一个伸出食指的小手等等。 解决方法&#xff1a; 使用到css中的cursor属性 代码实现&#xff08;以伸出食指的小手为例&#xff09;&#xff1a; <!DOCTYPE html> <html …

iphone开发UITable内嵌不同风格Table

在iphone开发中使用Table的时候&#xff0c;由于Table有的风格UITableViewStylePlain或者UITableViewStyleGrouped一旦指定&#xff0c;便无法修改。但是在使用的过程中&#xff0c;总是会出现一些特殊的需求&#xff0c;他们要求可以同时使用不同的风格。 那么可以在制作table…

php面试题8

php面试题8 一、总结 二、php面试题8 1、表单数据提交方式 POST 和 GET 的区别&#xff0c;URL 地址传递的数据最大长度是多少&#xff1f;$_GET 传参是请求 HTTP 协议通过 url 参数传递和接收,会在浏览器地址栏中看到$_GET 传参最多 2k 个字符$_POST 是实体数据传参,隐藏式的,…

php 计算器

<html><head><title>PHP实现简单计算器</title><meta http-equiv"Content-Type" content"text/html;charsetgb2312"></head> <?php$num1true;$num2true;$numatrue;$numbtrue;$message"";//单路分支if(i…

【jQuery】如何用jQuery实现鼠标移入后改变背景颜色

实现效果如图&#xff1a; jQuery代码实现&#xff1a; $(function () {var oldColor "";$(".mouse-in-out").mouseover(function () {originalColor $(this).css("background-color");$(this).css("background-color","#d9e8f…

域用户权限设置目录权限

声明&#xff1a;本文转载自gnaw0725.blogbus.com&#xff0c;更新网址&#xff1a;http://gnaw0725.blog.51cto.com。 一般用户是domain user权限&#xff0c;现在设置的策略是&#xff0c;每个硬盘分区的权限下只有administratordomain,和userdomain可以读写&#xff0c;遇到…

有用的编程相关网站

1.代码可视化网站&#xff1a;http://www.pythontutor.com 转载于:https://www.cnblogs.com/fuqia/p/9074571.html

手把手教你如何扩展GridView之自带CheckBox

我们在使用GridView的时候&#xff0c;很多时候需要使用CheckBox列&#xff0c;比如批量删除&#xff0c;批量审批&#xff0c;但是每每都需要记住繁琐的实现方法。多麻烦呀&#xff01;再次给GridView做个手术&#xff0c;让它自己就能产生CheckBox岂不爽死了。以后您就有权利…

c++ 的重载、覆盖、隐藏

成员函数被重载的特征&#xff1a;&#xff08;1&#xff09;相同的范围&#xff08;在同一个类中&#xff09;&#xff1b;&#xff08;2&#xff09;函数名字相同&#xff1b;&#xff08;3&#xff09;参数不同&#xff1b;&#xff08;4&#xff09;virtual关键字可有可无。…

【css】padding 和 margin的区别

css中有有一对经常是一起出现的属性&#xff1a;padding和margin&#xff0c;接下来我们以一个例子来看一下两个属性的作用及其区别。 实例演示&#xff1a; 使用属性前&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head&…

POJ-2159(Water)

2159:Ancient Cipher 查看提交统计提问时间限制: 1000ms 内存限制: 65536kB 描述 Ancient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capital…

tensor乘运算

torch.mul(a, b) 是矩阵 对应位相乘&#xff0c;即点乘操作&#xff0c; a和b的维度必须相等&#xff0c;a的维度是(1,2)&#xff0c; 则b的维度必须是&#xff08;1,2&#xff09;&#xff0c; 返回还是&#xff08;1,2&#xff09;的矩阵 torch.mm(a,b)是矩阵a和b矩阵相乘&am…

android,与PHP通信,返回JSON

小项目需要读取数据库&#xff0c;刚好手头有服务器&#xff0c;处于某些考虑&#xff0c;还是想远程读数据&#xff0c;所遇异常 Logcat异常&#xff1a;SingleClientConnManager(411): Invalid use of SingleClientConnManager: connection still allocated. Make sure to re…

【工具软件】webstorm配置

下载webstorm和jar包&#xff1a; 下载网址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Tnp4TqWnu8dQzv6ds7zhyw 提取码&#xff1a;de0f 下载软件&#xff1a; 1、 2、选择一个非C盘的位置安装 3、在1处选自你电脑的操作系统&#xff0c;大概率是64位的&#x…

美国爱因斯坦计划技术分析

【本文与2014年6月16日再次编辑&#xff0c;增加了一个续文的链接】【本文于2011年8月30日再次更新&#xff0c;修订并补充了有关爱因斯坦3的一些内容】【本文于2011年8月20日更新】【前言】本文始于对网络安全态势感知的研究。而美国的这个爱因斯坦计划可以看成是网络态势感知…

[C].运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和…

[kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

L - 还是畅通工程 题目链接&#xff1a;https://vjudge.net/contest/66965#problem/L 题目&#xff1a; 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一定有直…

[建议] GCC 新手入门【转】

本文是写给 gcc 新手的入门文章&#xff0c;所以内容比较简单。如果你知道下面3条命令都可以编译c的话&#xff0c;就不用在本文浪费时间了 g -Wall hellocpp.cpp gcc -Wall hellocpp.cpp -lstdc gfortran -Wall hellocpp.cpp -lstdc 注&#xff1a;本文最新版在wiki中 http:…

【java】如何判断数组中的内容是否重复

代码实现&#xff1a; public static boolean judgeArray(long[] arraySample) {HashSet<Long> hashSet new HashSet<Long>();for (int i 0; i < arraySample.length; i) {hashSet.add(arraySample[i]);}if (hashSet.size() arraySample.length) {return tr…