Unity 屏幕坐标转UI坐标
1:屏幕坐标转UI坐标
首先我们来明确下三个坐标概念:
世界坐标:指的是Transform组件的position字段
UI坐标:指的是RectTransform组件的anchoredPosition字段
屏幕坐标:指的是屏幕空间的坐标 (也可以说是相机空间的坐标)。反正关于屏幕坐标,大家只要知道以下2点即可
- 我们在Unity中获取的鼠标的坐标,就是屏幕坐标!
- 屏幕坐标和世界坐标不是一个东西,屏幕坐标和UI坐标不是一个东西!
Unity官方提供了一个方法,让我们可以很简单的把屏幕坐标 转换成UI坐标!
这个方法就是:
RectTransformUtility.ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);
但是,我一直没太搞懂这个方法,网上又查找不到相关的资料。
官方文档感觉根本没描述清楚,只有自己慢慢尝试。
以下是自己对官方文档的翻译,以及自己尝试之后对官方文档的一些理解。
理解之后,这个方法还是非常好用哒!
(很可能有错误的地方,希望大家指出呢!文章开头有排版好的PDF文件,欢迎观看+下载哒!)
参数详解
RectTransformUtility.ScreenPointToLocalPointInRectangle(
RectTransform rect,
Vector2 screenPoint,
Camera cam,
out Vector2 localPoint);
参数 rect:
这个参数需要你提供一个父物体的RectTransform。因为这个方法是取得UI坐标,而UI坐标都是局部坐标,所以一定需要一个父物体,才能计算出局部坐标。(有父物体才有局部坐标对吧!)
最后,这个方法就会把屏幕上的点转化为这个父物体下的局部坐标。
参数 screenPoint:
这个参数需要你提供一个屏幕空间 的坐标 (屏幕坐标)。
最后,这个方法会把这个屏幕坐标 转化为ui坐标。
参数 cam:
这个参数需要你指定一个相机。
因为UI坐标是根据相机来确定的。(如果Canvas是Screen Space-overlay模式,cam参数应为null)
参数 localPoint:
这个参数需要你提供一个装"返回值"的容器给方法。(如果不能理解高级参数out,可以在这里了解下:https://www.cnblogs.com/linfenghp/p/6618580.html)
最后,这个方法会把屏幕点的UI坐标的结果,装到这个变量中。、
你也可以这样理解:你给指定一个Vector2变量给这个参数,这个方法最后会把转换好的UI坐标赋值给你指定的这个变量。
返回值 - bool类型:
这个方法有一个返回值,但是我自己没使用过这个返回值(感觉用处不大?)。
官方的说法是:这个返回值是,判断此点是否在Rect所在的平面上。
如果在,就返回true。
总结一下就是:
提供一个屏幕坐标点,再指定一个相机,再指定一个父物体。
就可以得到UI坐标点!
关注我 ----------------------->你可以得到更多
Unity 屏幕坐标转UI坐标相关推荐
- Unity屏幕坐标转UI坐标
var t = Vector2.zero; RectTransformUtility.ScreenPointToLocalPointInRectangle(mCanvas.transform as R ...
- 坐标转换,屏幕坐标转UI坐标
private Vector3 WorldPointToUILocalPoint(RectTransform parent, Camera camera, Vector3 mousePos){Vect ...
- Unity将世界坐标转为UI坐标
Unity将世界坐标转为UI坐标 话不多说,直接上代码: public void World2ToUI(Vector3 wpos, RectTransform uiTarget){//初始化一个屏幕坐 ...
- 【Unity3D】在Unity中实现UI指向箭头
本问转载自http://ghostyii.com/uiarrow/,为什么转载呢,怕以后找不到了! ps:博主写到超级详细,复制粘贴即可使用,超赞的! 0x0.引言 屏幕UI指示箭头,非常常见的游戏U ...
- Unity日记-移动UI
Unity日记-移动UI 1.在需要给需要移动的UI添加一个Empty GameObject的父物体. 2.通过RectTransform找到Empty GameObject. 3.用Empty.an ...
- WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标
WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标 收藏 设置坐标映射 (1)Windows坐标系统 Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言, GD ...
- Unity报错但VS(代码编辑器)不报错,Unity提示需要继承自MonoBehavior,Unity提示缺少命名空间或者DLL,Unity点击UI或者GameObject无法在Hierarchy锁定
Unity一些神奇的报错包括但不限于 在2021年10月1日到2021年10月31日遇到的一些神奇的Unity的报错. 继承了MonoBehavior 但是Unity提示没有继承 问题描述:提示创建的 ...
- Unity程序开发框架——UI管理模块
UI基类BasePanel负责帮助我门通过代码快速的找到所有的子控件,方便我们在子类中处理逻辑,节约找控件的工作量. public class BasePanel : MonoBehaviour {/ ...
- Unity项目中UI美术必须知道的程序要点
原文地址:http://youxiputao.com/articles/4820 本文转载自IndieACE(游戏葡萄),是开发者DonaldW写给UI美术同事的一篇文章,原文题为<Unity项 ...
- Unity Multiple_Graph_And_Chart_UI_Pack 可视化UI插件
Unity Multiple_Graph_And_Chart_UI_Pack 可视化UI插件 资源地址:https://download.csdn.net/download/m0_55632444/8 ...
最新文章
- 分布式缓存技术memcached学习(一)——linux环境下编译memcahed
- 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka
- 一个FragmentActivity多个Fragment的生命周期事件记录
- 【Spring注解系列05】@Import注入原理
- 分布式系统session一致性的问题
- 学习笔记~~~~LinkedHashMap
- Centos7 ubuntu 安装Telnet服务
- 排序算法:直接插入排序算法实现及分析
- 年薪35W+ 的程序员看过来!百万架构师第3期招生
- iOS推送(利用极光推送)
- 2018SDIBT_国庆个人第七场
- TMS570LC43xx SylixOS can 驱动
- java的打印语句_java打印输出语句是什么?
- win10各版本的历史记录
- 盛大文学云中书城zz
- 数据泄露,数据防泄密该怎么做?
- 使用 Navicat 备份还原数据库
- 干货分享 | 如何在业余时间学习数据分析?
- BDD之cucumber
- 详解ASEMI整流桥MB6S在恒流LED驱动电源中的应用
热门文章
- 74cms v5.0.1 漏洞复现
- 2016服务器系统驱动,windows sever2016驱动大家是怎么装的啊
- android json 转map,json字符串转map
- 查看U盘是USB2.0还是USB3.0
- Android 自定义标尺滑动选择值
- js实现select动态添加option,默认为选中状态
- html5模板md风格,使用CSS3 制作一个material-design 风格登录界面实例
- 23种设计模式设计原则
- jdk动态代理详解(通俗易懂,5分钟带你快速理解动态代理)全网最简
- CenterOS7安装redis