Unity世界坐标转成UI坐标

news/2025/2/22 5:27:22/

Unity世界坐标转成UI坐标

  • 介绍
  • 转换代码
  • 合并方法
  • 总结

介绍

在Unity中官方提供了很多坐标转换的API,但是还没有一个API是将世界坐标系转换成UI的坐标系,世界坐标系在屏幕中的位置是不固定的所以有时候需要转换成UI坐标系**(注意这里不是转换成屏幕坐标,而是UI坐标)**

转换代码

需要先将世界坐标转换成屏幕坐标,然后在将屏幕坐标转换成UI坐标

世界坐标转屏幕坐标

//需要转换的世界坐标
Vector3 worldPostion = new Vector3(0f, -3f, 0);
//世界坐标转换成屏幕坐标
Vector3 screenPosition = Camera.main.WorldToScreenPoint(worldPostion );

将屏幕坐标转换成UI坐标

//转换后的UI坐标
Vector2 localPosition;
//UI组件
RectTransform uiRectTransform;
//将屏幕坐标转换成UI的local坐标
RectTransformUtility.ScreenPointToLocalPointInRectangle(uiRectTransform, screenPosition, Camera.main, out localPosition);
//UI坐标赋值
uiRectTransform.anchoredPosition += localPosition;

合并方法

整理上述合并方法

		/// <summary>/// 世界坐标转换成UI坐标(直接赋值)/// </summary>/// <param name="worldPos">需要转换的世界坐标</param>/// <param name="uiRect">需要转换坐标的UI</param>private void WorldToUIPos(Vector3 worldPos, RectTransform uiRect){//世界坐标转屏幕坐标Vector3 screenPosition = Camera.main.WorldToScreenPoint(worldPos);// 将屏幕坐标转换为 UI 面板的本地坐标Vector2 localPosition;//将屏幕坐标转换成UI的local坐标RectTransformUtility.ScreenPointToLocalPointInRectangle(uiRect, screenPosition, Camera.main, out localPosition);//坐标赋值uiRect.anchoredPosition += localPosition;}/// <summary>/// 世界坐标转换成UI坐标(手动赋值)/// </summary>/// <param name="worldPos">需要转换的世界坐标</param>/// <param name="uiRect">需要转换坐标的UI</param>/// <returns></returns>private Vector2 WorldToUIPosWithReturn(Vector3 worldPos, RectTransform uiRect){//世界坐标转屏幕坐标Vector3 screenPosition = Camera.main.WorldToScreenPoint(worldPos);// 将屏幕坐标转换为 UI 面板的本地坐标Vector2 localPosition;//将屏幕坐标转换成UI的local坐标RectTransformUtility.ScreenPointToLocalPointInRectangle(uiRect, screenPosition, Camera.main, out localPosition);//注意这个地方的localPostion需要跟原坐标做+=不是直接赋值return localPosition;}

总结

感谢大家的支持!


http://www.ppmy.cn/news/1572088.html

相关文章

《Performance Analysisi and Tuning on Modern CPU》阅读笔记

摘要&#xff1a;本文是《Performance Analysisi and Tuning on Modern CPU》的阅读笔记。该书首先详细描述了现代CPU的硬件架构&#xff0c;一些性能指标和性能优化分析工具。然后介绍了一些从代码上如何修改能够使得代码更加快速的技术细节。最后描述了其他一些技术&#xff…

Windows 图形显示驱动开发-WDDM的操作流

下图显示了从创建呈现设备到显示内容时发生的 WDDM 操作流。 下图后面的信息更详细地描述了操作流的有序顺序。 创建渲染设备 应用程序请求创建呈现设备后&#xff1a; 1&#xff1a;DirectX 图形内核子系统 (Dxgkrnl) 调用内核模式显示微型端口驱动程序的 (KMD) DxgkDdiCrea…

Django开发入门 – 3.用Django创建一个Web项目

Django开发入门 – 3.用Django创建一个Web项目 Build A Web Based Project With Django By JacksonML 本文简要介绍如何利用最新版Python 3.13.2来搭建Django环境&#xff0c;以及创建第一个Django Web应用项目&#xff0c;并能够运行Django Web服务器。 创建该Django项目需…

【Unity新手】Text不显示字的问题解决办法

很多同学在unity里导入了一个Text发现字没有显示出来为什么呢&#xff1f; 首先在网络上下载一个.ttf或者.otf字体文件&#xff0c;导入资源&#xff0c;比如说我下载了黑体.otf 然后导入unity&#xff0c;右键字体TextMesgPro-FontAsset 然后字体设置里添加上就可以了

【MySQL】高频 SQL 50 题(基础版)

高频SQL50题&#xff08;基础版&#xff09; 1.查询 2.连接 MySQL多表查询&#xff08;联合查询、连接查询、子查询&#xff09; left join 左连接 我们首先执行LEFT JOIN操作&#xff0c;将两个表的数据基于 id 列进行组合。同样&#xff0c;我们使用 LEFT JOIN 来确保将所…

【工业场景】用YOLOv8实现火灾识别

火灾识别任务是工业领域急需关注的重点安全事项,其应用场景和背景意义主要体现在以下几个方面: 应用场景:工业场所:在工厂、仓库等工业场所中,火灾是造成重大财产损失和人员伤亡的主要原因之一。利用火灾识别技术可以及时发现火灾迹象,采取相应的应急措施,保障人员安全和…

WPS中如何批量上下居中对齐word表格中的所有文字

大家好&#xff0c;我是小鱼。 在日常制作Word表格时&#xff0c;经常需要对表格中的内容进行排版。经常会把文字设置成左对齐、居中对齐或者是右对齐&#xff0c;这些对齐方式都比较好设置&#xff0c;有时制作的表格需要把文字批量上下居中对齐&#xff0c;轻松几步就可以搞…

基于SpringBoot的“高考志愿智能推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高考志愿智能推荐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面 系统注册页…