Unity-世界坐标与屏幕坐标

2023-11-05

transform.position.x和transform.position.y的值含义是世界坐标。

世界坐标与屏幕坐标有时一样,有时不同,这和Canvas的渲染模式有关。

Canvas共有三种渲染模式
在这里插入图片描述

Screen Space - Overlay (此模式UGUI层一直在最上面,其他例如粒子等物体一直在UGUI层的下面)
在该模式下,世界坐标(transform.Position)和屏幕坐标是重合的,即左下为(0,0),右上为(screen.width,screen.height).此时世界坐标和屏幕坐标是一样的。

Screen Space - Camera(此模式UGUI层上面可以设置其他物体的显示,例如粒子显示,UGUI层不是一直在最上面)。

在没有设置Camera时,它和Screen Space - Overlay一样世界坐标,此时世界坐标和屏幕坐标是一样的。(transform.Position)和屏幕坐标是重合的。具体是如下图的设置,2D开发推荐用如下的设置

在这里插入图片描述

在设置了Camera时,世界坐标(transform.Postion)和它的Camera相关

在这里插入图片描述

在正交相机投影时与Size有关
在这里插入图片描述

在透视投影时与FOV和Plane Distance相关
在这里插入图片描述

2D主要用正交相机模式

不挂相机时,显示的是从屏幕左下角到该物体的距离,此时此时世界坐标和屏幕坐标是一样的。

**加粗样式**

挂上相机后,世界坐标的值是显示和相机的位置(相机默认一般是在屏幕的中间)。

在这里插入图片描述

这种模式下,想获得屏幕坐标,需要使用camera.WorldToScreenPoint(transform.position);进行转换。

在这里插入图片描述

在这里插入图片描述

此时转换后的屏幕坐标和之前没挂相机前的数值一致的。

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Demo : MonoBehaviour
{
    public Button test;
    public Camera camera;

    void Start()
    {
        Debug.Log("世界坐标:transform.position.x = " + test.transform.position.x);
        Debug.Log("世界坐标转换为屏幕坐标:WorldToScreenPoint.x = " + camera.WorldToScreenPoint(test.transform.position).x);
        Debug.Log("test.GetComponent<RectTransform>().anchoredPosition.x = " + test.GetComponent<RectTransform>().anchoredPosition.x);
        Debug.Log("test.transform.localPosition.x = " + test.transform.localPosition.x);
    }

}

此时获得屏幕坐标还可以通过camera.ScreenToWorldPoint转回世界坐标

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Demo : MonoBehaviour
{
    public Button test;
    public Camera camera;

    void Start()
    {
        Debug.Log("世界坐标:transform.position.x = " + test.transform.position.x);
        Debug.Log("世界坐标转换为屏幕坐标:WorldToScreenPoint.x = " + camera.WorldToScreenPoint(test.transform.position).x);
        Debug.Log("test.GetComponent<RectTransform>().anchoredPosition.x = " + test.GetComponent<RectTransform>().anchoredPosition.x);
        Debug.Log("test.transform.localPosition.x = " + test.transform.localPosition.x);

        Vector3 myVector = camera.WorldToScreenPoint(test.transform.position);

        Debug.Log("屏幕坐标转换为世界坐标为:ScreenToWorldPoint.x = " + camera.ScreenToWorldPoint(myVector).x);

    }

}

打印效果如下

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity-世界坐标与屏幕坐标 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • Visual Studio 编译C++时出现 error RC2144: PRIMARY LANGUAGE ID not a number

    最近在用VS编译Qt项目时 为rc资源文件添加了版本信息后就编译不通过了 编译输出提示错误 error RC2144 PRIMARY LANGUAGE ID not a number 在网上搜索后发现大多数的解决方法是在rc文件中添加如下一
  • windows hosts文件恢复

    解决方法 重新创建hosts文件 在路径C Windows System32 drivers etc中查找 注意 记住hosts文件没有后缀 之前我一直存储为文本导致无法正常使用
  • 减少域名DNS解析时间将网页加载速度提升新层次-DNS缓存/预读取/拆分域名

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们知道在用户访问网站时先得经过域名DNS解析这一过程 可能很多人对于DNS解析时间平常并没有太在意 性能稳定 响应时间快的DNS域名解析服务与不稳定 响应过慢的DNS的域
  • vue中使用(瀑布流)vue-waterfall-easy插件

    参考文档 效果图如下 1 安装 npm install vue waterfall easy save dev 2 引入 import vueWaterfallEasy from vue waterfall easy export defa
  • Nacos配置中心原理(一)客户端部分

    基本概念 配置服务 在服务或者应用运行过程中 提供动态配置或者元数据以及配置管理的服务提供者 配置项 个具体的可配置的参数与其值域 通常以 param key param value 的形式存在 例如我们常 配置系统的日志输出级别 logL
  • OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用

    OpenCV3 3中给出了主成分分析 Principal Components Analysis PCA 的实现 即cv PCA类 类的声明在include opencv2 core hpp文件中 实现在modules core src p
  • SAS9.4安装简易教程(保姆级)附带报错处理

    SAS安装教程 正常安装 环境准备 文件准备及安装 增强编辑器问题 一些报错处理方法 1 安装后处理 解决方案1 解决方案2 2 日期超过了SAS系统的最后截至日期 解决方案 3 逻辑库问题 解决方案 4 sid及产品许可问题 解决方案 卸
  • JT格式介绍(转换)

    JT Jupiter Tessellation 是一种高效 专注于行业且灵活的 ISO 标准化 3D 数据格式 由 Siemens PLM Software 开发 航空航天 汽车工业和重型设备的机械 CAD 领域使用 JT 作为其最领先的
  • 我的世界服务器无限刷东西指令,我的世界无限刷物品命令方块指令

    发布时间 2015 09 11 精华文章推荐 合成表大全 前期生存图文指南 怪物图鉴及属性一览 敖厂长生存解说视频 新手建筑指导班 豪华建筑建造教程 俾斯麦号建造方法 WE建筑辅助教程 创建服务器方法指南 加入服务器联机教程 多 标签 攻略
  • 学习实践-Alpaca-Lora (羊驼-Lora)(部署+运行+微调-训练自己的数据集)

    Alpaca Lora模型GitHub代码地址 1 Alpaca Lora内容简单介绍 三月中旬 斯坦福发布的 Alpaca 指令跟随语言模型 火了 其被认为是 ChatGPT 轻量级的开源版本 其训练数据集来源于text davinci
  • elasticsearch介绍

    什么是elasticsearch Elasticsearch是一个基于Lucene的搜索服务器 它提供了一个分布式多用户能力的全文搜索引擎 基于RESTful web接口 Elasticsearch是用Java语言开发的 并作为Apache
  • 知道这10个让你的API接口突然超时的原因吗?

    前言 不知道你有没有遇到过这样的场景 我们提供的某个API接口 响应时间原本一直都很快 但在某个不经意的时间点 突然出现了接口超时 也许你会有点懵 到底是为什么呢 今天跟大家一起聊聊接口突然超时的10个原因 希望对你会有所帮助 1 网络异常
  • CSS高级用法

    收藏一些css的高级用法 1 黑白图像 这段代码会让你的彩色照片显示为黑白照片 1 2 3 4 5 6 7 img desaturate filter grayscale 100 webkit filter grayscale 100 mo
  • java出现圅_java获取汉字拼音首字母A

    public class GetChinessFirstSpell 汉字拼音首字母列表 本列表包含了20901个汉字 用于配合 GetChineseSpell 函数使用 本表收录的字符的Unicode编码范围为19968至40869 南京
  • mac移动硬盘未装载解决方案

    一 现象 外置移动硬盘桌面不显示 只在磁盘工具应用中置灰显示 坑爹的是你无法进行任何操作只能查看详细信息 二 尝试解决方法 1 尝试了很多修复工具也没有用 包括Tuxera 因为你压根没有装载成功谈何其它操作 2 尝试手动装载 卸载 1 使
  • IC新人必看:芯片设计流程最全讲解!

    对于消费者而言 一个可以使用的系统 有数字集成电路部分 模拟集成电路部分 系统软件及上层应用部分 关于各个部分的功能 借用IC 咖啡胡总的精品图可以一目了然 外部世界是一个模拟世界 故所有需要与外部世界接口的部分都需要模拟集成电路 模拟集成
  • Kafka 入门三问

    目录 1 Kafka 是什么 1 1 背景 1 2 定位 1 3 产生的原因 1 4 Kafka 有哪些特征 消息和批次 模式 主题和分区 生产者和消费者 broker 和 集群 1 5 Kafka 可以做什么 Kafka作为消息系统 Ka
  • java开发中手动设置logback、jvm、容器的时区

    一 Logback xml配置日志输出时区为东八区 1 在日志格式配置后添加 CTT 或 GMT 8
  • electron 调试、问题追踪

    文章目录 前言 一 调试工具 1 生产环境调试工具 bugtron 2 日志 1 业务日志 2 网络日志 3 崩溃报告 二 捕获全局异常 1 开发网页时 2 在electron中全局异常捕获 3 从异常中恢复 保护用户界面 总结 前言 开发
  • Unity-世界坐标与屏幕坐标

    transform position x和transform position y的值含义是世界坐标 世界坐标与屏幕坐标有时一样 有时不同 这和Canvas的渲染模式有关 Canvas共有三种渲染模式 Screen Space Overla