当前位置: 首页 > news >正文

Unity世界坐标转成UI坐标

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.lryc.cn/news/535397.html

相关文章:

  • 自制游戏——斗罗大陆
  • MindStudio制作MindSpore TBE算子(四)算子测试(ST测试-Ascend910B/ModelArts)--失败尝试
  • 二、交换机的vlan子设备接入
  • EFCore相关知识分享
  • 检测网络安全漏洞 工具 网络安全 漏洞扫描 实验
  • deepseek + kimi 高效生成PPT
  • JavaWeb学习-Mybatis(增删改查)
  • 软考高项(二十四)法律法规和标准规范 ★重点集萃★
  • Django中select_related 的作用
  • vscode无法ssh连接远程机器解决方案
  • 计算机组成原理——中央处理器(九)
  • 网页版贪吃蛇小游戏开发HTML实现附源码!
  • 基于java ssm springboot选课推荐交流平台系统设计和实现
  • Sigma-Aldrich化学品安全技术说明书(SDS)查询教程
  • 嵌入式实训室解决方案(2025年最新版)
  • Spring Cloud — 深入了解Eureka、Ribbon及Feign
  • 全排列(力扣46)
  • Mac部署Jenkins 一
  • 附录1:组维英文简写大全
  • SQL Server:查看内存使用情况
  • chrome-mojo C++ Bindings API
  • uniapp + vite + 使用多个 ui 库
  • Unity3D 制作动画的时间轴管理方案: Timeline编
  • 逻辑回归不能解决非线性问题,而svm可以解决
  • Prompt通用技巧1
  • C# 上位机--枚举
  • 01docker run
  • 易语言.飞扬特性展示2
  • FlashDecoding
  • 提示词生成新方法,用Make自动化生成