1:屏幕坐标转UI坐标

首先我们来明确下三个坐标概念:

世界坐标:指的是Transform组件的position字段

UI坐标:指的是RectTransform组件的anchoredPosition字段

屏幕坐标:指的是屏幕空间的坐标 (也可以说是相机空间的坐标)。反正关于屏幕坐标,大家只要知道以下2点即可

  1. 我们在Unity中获取的鼠标的坐标,就是屏幕坐标!
  2. 屏幕坐标和世界坐标不是一个东西,屏幕坐标和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坐标相关推荐

  1. Unity屏幕坐标转UI坐标

    var t = Vector2.zero; RectTransformUtility.ScreenPointToLocalPointInRectangle(mCanvas.transform as R ...

  2. 坐标转换,屏幕坐标转UI坐标

    private Vector3 WorldPointToUILocalPoint(RectTransform parent, Camera camera, Vector3 mousePos){Vect ...

  3. Unity将世界坐标转为UI坐标

    Unity将世界坐标转为UI坐标 话不多说,直接上代码: public void World2ToUI(Vector3 wpos, RectTransform uiTarget){//初始化一个屏幕坐 ...

  4. 【Unity3D】在Unity中实现UI指向箭头

    本问转载自http://ghostyii.com/uiarrow/,为什么转载呢,怕以后找不到了! ps:博主写到超级详细,复制粘贴即可使用,超赞的! 0x0.引言 屏幕UI指示箭头,非常常见的游戏U ...

  5. Unity日记-移动UI

    Unity日记-移动UI 1.在需要给需要移动的UI添加一个Empty GameObject的父物体. 2.通过RectTransform找到Empty GameObject. 3.用Empty.an ...

  6. WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标

    WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标 收藏 设置坐标映射 (1)Windows坐标系统 Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言, GD ...

  7. Unity报错但VS(代码编辑器)不报错,Unity提示需要继承自MonoBehavior,Unity提示缺少命名空间或者DLL,Unity点击UI或者GameObject无法在Hierarchy锁定

    Unity一些神奇的报错包括但不限于 在2021年10月1日到2021年10月31日遇到的一些神奇的Unity的报错. 继承了MonoBehavior 但是Unity提示没有继承 问题描述:提示创建的 ...

  8. Unity程序开发框架——UI管理模块

    UI基类BasePanel负责帮助我门通过代码快速的找到所有的子控件,方便我们在子类中处理逻辑,节约找控件的工作量. public class BasePanel : MonoBehaviour {/ ...

  9. Unity项目中UI美术必须知道的程序要点

    原文地址:http://youxiputao.com/articles/4820 本文转载自IndieACE(游戏葡萄),是开发者DonaldW写给UI美术同事的一篇文章,原文题为<Unity项 ...

  10. Unity Multiple_Graph_And_Chart_UI_Pack 可视化UI插件

    Unity Multiple_Graph_And_Chart_UI_Pack 可视化UI插件 资源地址:https://download.csdn.net/download/m0_55632444/8 ...

最新文章

  1. 分布式缓存技术memcached学习(一)——linux环境下编译memcahed
  2. 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka
  3. 一个FragmentActivity多个Fragment的生命周期事件记录
  4. 【Spring注解系列05】@Import注入原理
  5. 分布式系统session一致性的问题
  6. 学习笔记~~~~LinkedHashMap
  7. Centos7 ubuntu 安装Telnet服务
  8. 排序算法:直接插入排序算法实现及分析
  9. 年薪35W+ 的程序员看过来!百万架构师第3期招生
  10. iOS推送(利用极光推送)
  11. 2018SDIBT_国庆个人第七场
  12. TMS570LC43xx SylixOS can 驱动
  13. java的打印语句_java打印输出语句是什么?
  14. win10各版本的历史记录
  15. 盛大文学云中书城zz
  16. 数据泄露,数据防泄密该怎么做?
  17. 使用 Navicat 备份还原数据库
  18. 干货分享 | 如何在业余时间学习数据分析?
  19. BDD之cucumber
  20. 详解ASEMI整流桥MB6S在恒流LED驱动电源中的应用

热门文章

  1. 74cms v5.0.1 漏洞复现
  2. 2016服务器系统驱动,windows sever2016驱动大家是怎么装的啊
  3. android json 转map,json字符串转map
  4. 查看U盘是USB2.0还是USB3.0
  5. Android 自定义标尺滑动选择值
  6. js实现select动态添加option,默认为选中状态
  7. html5模板md风格,使用CSS3 制作一个material-design 风格登录界面实例
  8. 23种设计模式设计原则
  9. jdk动态代理详解(通俗易懂,5分钟带你快速理解动态代理)全网最简
  10. CenterOS7安装redis