Unity踩坑之RectTransformUtility.ScreenPointToLocalPointInRectangle

此方法会将屏幕坐标点转换为UI的本地坐标点,即UI子物体相对于父物体的相对位置。不过值得注意的是:当父物体的锚点不在中心时,可能比较麻烦,因为UI的本地坐标是相对于父物体的锚点来计算的。

RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, eventData.position, eventData.pressEventCamera, out localPoint)
  • parentRectTransform:这是要进行坐标转换的RectTransform的父级RectTransform。它定义了坐标转换的参考系。通常,你会将父级RectTransform设置为UI元素所在的Canvas的RectTransform。

  • eventData.position:这是事件数据的屏幕坐标。它表示鼠标或触摸事件发生的位置。

  • eventData.pressEventCamera:这是事件数据的相机。它表示事件发生时使用的相机。对于UI事件,通常使用UI相机(例如Canvas上的UI Camera)。

  • localPoint:这是一个输出参数,用于存储转换后的本地坐标。方法执行后,将通过这个参数返回转换后的坐标值。

假设鼠标点击a物体(都为UI元素,下同),而a物体的父物体为A,如果A相对于Canvas,其锚点在Canvas的中心点,那么使用RectTransformUtility.ScreenPointToLocalPointInRectangle方法,将父物体,鼠标指针位置,渲染Canvas的相机(若为Overly则为null),传入,得到的localPoint就是a的PosX和PosY。但是如果A的锚点不在Canvas的中心,那么得到的localPoint就不会是预期值了。

如果子物体的父物体的锚点不在中心,可以在子物体上再套一个空物体,将空物体的锚点设为父物体的中心,则完美解决。

相关推荐

  1. 工作记录

    2024-07-15 04:40:03       59 阅读
  2. Flutter

    2024-07-15 04:40:03       46 阅读
  3. VSCodePowerShell中创建项目

    2024-07-15 04:40:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 04:40:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 04:40:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 04:40:03       57 阅读
  4. Python语言-面向对象

    2024-07-15 04:40:03       68 阅读

热门阅读

  1. UOS查看系统信息命令行

    2024-07-15 04:40:03       19 阅读
  2. 【学习笔记】Redis学习笔记——第11章 AOF持久化

    2024-07-15 04:40:03       22 阅读
  3. LeetCode 219. 存在重复元素 II

    2024-07-15 04:40:03       23 阅读
  4. 实验05 单元测试

    2024-07-15 04:40:03       22 阅读
  5. Hash表以及put方法源码的分析

    2024-07-15 04:40:03       21 阅读
  6. 対日開発(錬体境から金丹境まで)

    2024-07-15 04:40:03       16 阅读
  7. 用python实现反向输出链表

    2024-07-15 04:40:03       26 阅读
  8. 如何评价一个AI系统

    2024-07-15 04:40:03       20 阅读
  9. 查找运行中 sql中bind variable value 绑定变量值

    2024-07-15 04:40:03       21 阅读