Unity的坐标系统及它们互相转换的方法

在Unity中,常用的坐标系统有以下这些:

  1. 屏幕坐标(Screen Space):屏幕坐标是基于屏幕的坐标系统,是2D坐标系,原点位于屏幕左下角,x轴向右延伸,y轴向上延伸。屏幕坐标通常用于处理用户界面(UI)元素的位置和交互。

  2. 世界坐标(World Space):世界坐标是游戏世界的坐标系统,它定义了游戏中所有对象的位置和方向。世界坐标是一个三维坐标系,通常使用笛卡尔坐标系,其中x轴表示水平方向,y轴表示垂直方向,z轴表示深度或前后方向。

  3. 局部坐标(Local Space):局部坐标是相对于对象自身的坐标系统。每个游戏对象都有自己的局部坐标系,原点位于对象的中心点,x轴、y轴和z轴分别表示对象的宽度、高度和深度。局部坐标用于描述对象内部的位置和变换。

  4. 视图坐标(View Space):视图坐标是相对于摄像机的坐标系统。它是从摄像机的视角来定义对象的位置和方向。视图坐标一般用于进行摄像机空间的渲染和可见性计算。

  5. 屏幕像素坐标(Screen Pixel Space):屏幕像素坐标是以屏幕像素为单位的坐标系统。原点位于屏幕左下角,x轴和y轴的单位是像素。屏幕像素坐标一般用于处理屏幕上的像素级别的操作,如绘制纹理、图像处理等。

 互相转换的方法:

1、世界坐标与局部坐标的互转:

  • 世界坐标转局部坐标使用InverseTransformPoint方法,如:
// 世界坐标转局部坐标
Vector3 worldPosition = new Vector3(2, 0, 0);
Transform transform = gameObject.transform;
Vector3 localPosition = transform.InverseTransformPoint(worldPosition);
  • 局部坐标转世界坐标使用TransformPoint方法,如:

// 局部坐标转世界坐标
Vector3 localPosition = new Vector3(1, 0, 0);
Transform transform = gameObject.transform;
Vector3 worldPosition = transform.TransformPoint(localPosition);

2、屏幕坐标与世界坐标的互转:

  • 屏幕坐标转世界坐标使用ScreenToWorldPoint方法,如:
// 屏幕坐标转世界坐标
Vector3 screenPosition = new Vector3(100, 150, 0);
Camera mainCamera = Camera.main;
Vector3 worldPosition = mainCamera.ScreenToWorldPoint(screenPosition);
  • 世界坐标转屏幕坐标WorldToScreenPoint方法,如:

// 世界坐标转屏幕坐标
Vector3 worldPosition = new Vector3(1, 0, 0);
Camera mainCamera = Camera.main;
Vector3 screenPosition = mainCamera.WorldToScreenPoint(worldPosition);

3、视图坐标与屏幕坐标的互转:

  • 视图坐标转屏幕坐标使用WorldToScreenPoint方法,如:
// 视图坐标转屏幕坐标
Vector3 viewPosition = new Vector3(0, 0, -10);
Camera mainCamera = Camera.main;
Vector3 screenPosition = mainCamera.WorldToScreenPoint(viewPosition);
  • 屏幕坐标转视图坐标ScreenToWorldPoint方法,如:
// 屏幕坐标转视图坐标
Vector3 screenPosition = new Vector3(100, 150, 0);
Camera mainCamera = Camera.main;
Vector3 viewPosition = mainCamera.ScreenToWorldPoint(new Vector3(screenPosition.x, screenPosition.y, 100));

4、屏幕坐标与屏幕像素坐标的互转:
屏幕坐标转屏幕像素坐标,通过分辨率比例转化,如:

// 屏幕坐标转屏幕像素坐标
Vector3 screenPosition = new Vector3(100, 150, 0);
int screenWidth = Screen.width;
int screenHeight = Screen.height;
Vector3 pixelPosition = new Vector3(screenPosition.x * screenWidth, screenPosition.y * screenHeight, 0);

屏幕像素坐标转屏幕坐标,通过分辨率比例转化,如:

// 屏幕像素坐标转屏幕坐标
Vector3 pixelPosition = new Vector3(250, 300, 0);
int screenWidth = Screen.width;
int screenHeight = Screen.height;
Vector3 screenPosition = new Vector3(pixelPosition.x / screenWidth, pixelPosition.y / screenHeight, 0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「智慧城市」这一概念科学吗?还是炒作?

智慧城市是一个综合性的概念,它利用信息技术和创新概念,将城市的各个系统和服务集成起来,以提升城市运行效率、优化城市管理和服务,改善市民的生活质量。 具体来说,智慧城市涵盖了许多领域,包括城市规划、建…

通过仿真理解信道化接收机分析过程

概要 信道化从子信道带宽划分上可分为临界抽取和非临界抽取两种,从各子信道中心频率布局上可分为偶型排列和奇型排列,从处理流程上可分为信道化分析与信道化综合过程。本文主要通过仿真来理解偶型排列/临界抽取/信道化分析过程。 基本原理 常规的数字…

ESP32网络开发实例-发送邮件

发送邮件 文章目录 发送邮件1、邮件发送配置2、软件准备3、硬件准备4、代码实现本文将详细介绍在ESP32中如何使用SMTP协议发送邮件。 1、邮件发送配置 在本次实例中,我们将通过QQ邮箱向指定邮件地址发送邮件。 第一步,注册QQ邮箱 第二步,开启QQ邮箱SMTP/IMAP 服务: 生成…

6.1810: Operating System Engineering 2023 <Lab4 traps: Traps>

一、本节任务 二、要点(Traps and system calls) 有三种事件会使 CPU 暂停当前的指令执行,并强制将控制转移到处理该事件的特殊代码中: 系统调用(ecall);异常(如非法指令&#xff…

重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了

本文来自DataLearnerAI官方网站:重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/105170187…

Java 输入输出流03

8. 字符流 Writer/Reader Java 中字符是采用 Unicode 标准,一个字符是 16 位,即一个字符使用两个字节来表示。为此,JAVA 中引入了处理字符的流。 1)Reader抽象类 用于读取字符流的抽象类。子类必须实现的方法只有 read (char [],…

“数”说新语向未来 | GBASE南大通用2023媒体交流会成功举办

在当前国家信创战略加速实施,及国民经济数字化转型,叠加驱动信息化行业加速发展的大形势下,以“数说新语-GBASE南大通用开放创新再领航”为主题的2023 GBASE南大通用媒体交流日活动在GBASE天津总部举行。来自IT168、ITPUB、韩锋频道、自主可控…

海思SD3403/SS928V100开发(11)双网卡同网段外部回环搭建测试

1. 前言 网卡eth0: 内部自带网卡 网卡eth1: USB扩展网卡 需要通过将eth0和eth1设置成相同网段IP, 通过外部网络互联进行老化测试 问题: Linux的内核对从一个网络地址发往另一个网络地址的数据包,如 果这两个网络地址同属一个host,则这个数据包会直接在内部转发,根本…

Scala 从入门到精通

Scala 从入门到精通 数据类型 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…

Linux取消挂载相关

取消挂载&#xff08;target is busy&#xff09;问题原因 [rooticoolkj ~]# umount /data umount: /data: target is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))报错的原因通常是由于待卸载磁盘正在使用&#xf…

Elasticsearch:向量搜索的优势 — 以及 IT 领导者需要它来改善搜索体验的 5 个原因

作者&#xff1a;Evan Castle 与谷歌和亚马逊等高质量搜索引擎的频繁互动提高了客户对快速且相关搜索的期望。 向量搜索&#xff08;也称为语义向量搜索&#xff09;利用深度学习和机器学习来捕获数据的含义和上下文。 向量搜索的好处 向量搜索可以增强公司的搜索体验并带来广…

旅游规划——最短路

有了一张自驾旅游路线图&#xff0c;你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序&#xff0c;帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的&#xff0c;那么需要输出最便宜的一条路径。 输入格式: …

day7 哈希表(二)

Day7 哈希表&#xff08;二&#xff09; 2023.12.6 深感抱歉&#xff0c;这几天事情太多了&#xff0c;昨天跟导师出差&#xff0c;整理资料到半夜&#xff0c;一直没空打卡学习&#xff0c;今晚难得有空&#xff0c;先将昨天12.5日的任务补上。 1. 454四数相加Ⅱ 这道题其实还…

一次重新加载所有 maven 项目产生的 OOM

1、解决什么问题&#xff1f; 忘了截图了&#xff0c;用文字描述就是由于Reload All Maven Projects导致的 OOM 异常。 2、尝试与解决 2.1、尝试 2.1.1、尝试清理idea缓存&#xff08;无效&#xff09; 2.1.2、重启idea&#xff08;无效&#xff09; 2.1.3、重启电脑&am…

【LeetCode】258. 各位相加

258. 各位相加 难度&#xff1a;简单 题目 给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回这个结果。 示例 1: 输入: num 38 输出: 2 解释: 各位相加的过程为&#xff1a; 38 --> 3 8 --> 11 11 --> 1 1 --&g…

数树问题(桶排序)

某校大门外长度为L的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴0的位置&#xff0c;另一端在L的位置&#xff1b;数轴上的每个整数点&#xff0c;即0&#xff0c;1&#xff0c;2&#xff0c;……&am…

nginx遇到的问题和jks密码问题

1&#xff1a;nginx的配置&#xff1a; https 一定得配置 8080 ssl (我没有配置这个) 2&#xff1a;查看jks的密码 keytool -list -keystore secms.jks 让输入密码

锂电分切机常见故障及预测性维护解决方案

锂电分切机是电池生产线上不可或缺的设备&#xff0c;通过切割锂电池以满足不同应用需求。但在实际生产的使用过程中&#xff0c;常常会遇到一些故障&#xff0c;影响设备的正常运行和生产效率。为了减少这些故障对设备的影响&#xff0c;预测性维护成为制造商需要重视的解决方…

Linux动态库常见问题

1.编译好库后&#xff0c;应用程序调用&#xff0c;路径明明写对了&#xff0c;但是编译的时候却显示xxx未定义 2.编译好了却说不能打开动态库&#xff0c;没有此文件 ./jrtplib_test: error while loading shared libraries: libjrtp.so.3.11.2: cannot open shared object f…

java面试题,上楼梯有多少种方式

java面试题&#xff0c;上楼梯有多少种方式 题目&#xff1a;一个小孩上一个N级台阶的楼梯&#xff0c;他可以一次走1阶、2阶或3阶&#xff0c;那么走完N阶有多少种方式。 很自然的想法是使用递归&#xff1a; public class Test04 { public static int countWays(int n) {…