关于Unity3d的世界空间和本地空间的一点思考

最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的。于是花了一点时间随便写了一点代码加深理解。代码如下:

 1 public class MoveX : MonoBehaviour
 2 {
 3     void Update()
 4     {
 5         if (Input.GetMouseButtonDown(0))
 6         {
 7             var two = new Vector3(2, 2, 2);
 8             var localSpace = transform.InverseTransformPoint(two);
 9             var worldSpace = transform.TransformPoint(localSpace);
10             log(localSpace);
11             Debug.Log("-----空间分割线------");
12             log(worldSpace);
13         }
14     }
15
16     void log(Vector3 v)
17     {
18         Debug.Log(string.Format("x={0} y={1},z={2}", v.x, v.y, v.z));
19     }
20 }

在unity3d Editor中,我们创建一个cube的GameObject,它的坐标是(3,3,3),然后MoveX脚本赋给此cube。

首先我创建了一个三维坐标都是2的点,然后把它传给了transform.InverseTransformPoint(two),通过打印localSpace坐标点我们可以看到的信息为:x=-1 y=-1,z=-1,从这我们可以看出InverseTransformPoint的意思是:将transform的坐标作为原点(即世界空间的(3,3,3)),计算two坐标(即世界空间的(2,2,2))相对于transform原点的坐标。如下图所示:

接下来我将上面计算出来的相对于transform的坐标的localSpace赋给了transform.TransformPoint(localSpace),然后计算得到一个worldSpace坐标,通过打印worldSpace坐标点我们可以看到的信息为:x=2 y=2,z=2。刚好还原得到我们原来two坐标点。

原文地址:https://www.cnblogs.com/koeltp/p/9716180.html

时间: 2024-11-05 14:42:08

关于Unity3d的世界空间和本地空间的一点思考的相关文章

U3D中给Vector3向量应用本地空间矩阵变换

Transform到Transform的空间变换很容易,依赖层级模块就可以.今天遇到Vector3点到某个Transform的本地空间变换,试了一下解决了 var point = new Vector3(0, 5, 0); var convertPoint = transform.TransformDirection(point); Debug.Log("Primite Space:" + point + "Transform self space: " + (tr

【oracle11g,14】表空间管理3:临时表空间,表空间的脱机和只读,数据文件迁移,更改表空间数据文件的大小,表空间数据文件的迁移,使用非标准块的表空间,bigfile 表空间

一.临时表空间: 如果临时表空间不足会报ora-1652错误. 二.什么时候使用临时表空间: 排序和分组 索引create或rebuild order by 或group by distinct 操作 union或intersect或minus sort-merge joins analyze 用于排序.分组.索引等操作,在pga中的sort_area中排序,会将排序的中间结果存放到临时表空间中,如果想提高排序的效率可以提高sort_area_size参数值. 临时表空间不能存放持久化对象,推荐

香港空间与国内空间的对比优势在哪里?

香港空间不仅具有价格方面的实惠优势,更具有使用上的多项优势: 使用香港独立IP空间,支持免域名绑定,只需要将域名直接解析到香港独立IP空间就可以:使用香港独立IP空间,还可以减少IP被封的概率,不会因为一个网站有问题影响其他网站:另外,香港独立IP空间还可以提高网站在搜索引擎中的等级和收录,一个IP只对应一个网站,是最好的选择...香港独立IP空间优势实在太多了,说不尽!最重要的是使用香港独立IP空间可以直接使用IP访问网站:用户可以直接通过独立IP访问网站,避免一般的共享IP直接用IP访问会得

在Linux用户空间做内核空间做的事情

导读 我相信,Linux 最好也是最坏的事情,就是内核空间(kernel space)和用户空间(user space)之间的巨大差别.如果没有这个区别,Linux 可能也不会成为世界上影响力最大的操作系统. Linux内核空间和用户空间与燃起的Linux社区之火 如今,Linux 的使用范围在世界上是最大的,而这些应用又有着世界上最大的用户群——尽管大多数用户并不知道,当他们进行谷歌搜索或者触摸安卓手机的时候,他们其实正在使用 Linux. 如果不是 Linux 的巨大成功,Apple 公司也

Linux系统调用详解(如何从用户空间进入内核空间)

系统调用概述 计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制.也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call).在linux中系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口. 一般情况下应用程序通过应用编程接口API,而不是直接通过系统调用来编程.在Unix世界,最流行的API

深入理解Linux网络技术内幕——用户空间与内核空间交互

概述: 内核空间与用户空间经常需要进行交互.举个例子:当用户空间使用一些配置命令如ifconfig或route时,内核处理程序就要响应这些处理请求. 用户空间与内核有多种交互方式,最常用的有以下四种:通过/proc虚拟文件系统,通过/sys虚拟文件系统,通过ioctl系统调用,通过Netlink socket. 其中编写程序时最常使用ioctl,这四种方式中有两种是通过虚拟文件系统. procfs 与 sysctl procfs挂载/proc  sysctl挂载在/proc/sys(与后面介绍的

Operating System-Thread(3)用户空间和内核空间实现线程

本文主要内容: 操作系统用户空间和内核空间简介 在用户空间实现线程 在内核空间实现线程 用户空间和内核空间线程混合使用 一.用户空间和内核空间简介 用户空间:User space,内核空间:Kernel Space.这两个是操作系统的重要概念之一,今天为了线程做一下简单的介绍: 内核空间用于运行操作系统核心组件,比如内存管理组件,IO交互组件,文件管理.中断管理组件等,同时驱动程序(Driver)也运行在内核空间. 用户空间,用于运行普通应用程序. 示意图: 二,在用户空间实现线程 用户空间的线

用户空间与内核空间,进程上下文与中断上下文[总结]

用户空间与内核空间,进程上下文与中断上下文[总结] 最近有研究到zabbix监控,就得清楚cpu各个指标的含义, 1,简单回顾下cpu及计算机组成: 计算机五大部件: 运算器 控制器 存储器 输入/输出设备. 2,cpu 进程的内核态和用户态 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为 了保证用户进程不能直接操作内核,

[转] 栈空间和堆空间

kevinGao, 原文地址 一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈. 2.堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表. 3.全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量