IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> TransformDirection()菜鸟自己总结最容易理解 -> 正文阅读

[游戏开发]TransformDirection()菜鸟自己总结最容易理解

一、

现在有一个cube,pos和rotation都是(0,0,0),三个轴代表世界的三个轴,粗的那边为正方向。

222

对于cube自己的本地坐标系来说,cube==世界,cube==世界,cube==世界。也就是和世界坐标系(世界空间)重合。(Unity的轴为cube身上的local轴)

二、

print(transform.TransformDirection(Vector3.forward));

(代码挂在cube上,cube.transform就是transform)

这句代码含义是:打印( cube的(0,0,1)这个向量相当于世界的哪个向量?) ;

代码输出为:(0,0,1)

解释:cube自己坐标系的前方(0,0,1),相当于世界坐标系的哪个方向?因为现在是重合,所以cube的前方就是世界的前方,所以输出还是(0,0,1)。(Vector3.forward这里指的仅仅只是(0,0,1)而已,并不是世界坐标的前方。)

transform.Translate(transform.TransformDirection(Vector3.forward));

这段代码Translate()括号里的内容就是第一段代码,所以可以理解为Translate(0,0,1)。那么cube.Translate(0,0,1)是朝哪移动呢?肯定是顺着Z轴正方向(Z+)移动。

三、

现在cube在军训,教官叫他“向右转”(Y转90°):

现在pos为(0,0,0),rotation为(0,90,0)

222

现在本地坐标和世界坐标不再重合了。从图222可看出,cube==世界,cube==世界,cube==世界

再来看这两段代码:

print(transform.TransformDirection(Vector3.forward));

现在输出为:(1,0,0)

代码含义不变:打印( cube的(0,0,1)这个向量相当于世界的哪个向量?) ;现在的cube前相当于世界右,所以是(1,0,0)。

transform.Translate(transform.TransformDirection(Vector3.forward));

现在这段代码等于transform.Translate(1,0,0); 也就是cube向自己的右边平移,上面说cube的右==世界的后,所以,没错,cube朝着世界坐标的后移动(Z-)。

四、

再来一组试试,cube的x转90,y转90。现在pos为(0,0,0),rotation为(90,90,0),且代码中TransformDirection(xxx)的参数改为Vector3.right。

333

从图333可看出,cube==世界,cube==世界,cube==世界

print(transform.TransformDirection(Vector3.right));

输出:(0,0,-1),因为看图333,cube的右==世界后。

transform.Translate(transform.TransformDirection(Vector3.right));

代码等于transform.Translate(0,0,-1),也就是cube向后移动,还是看图333,cube的后就是世界的上,所以cube朝上飞

总结、

  • 所以TransformDirection(Vector3 dir),可以简单理解为:一个物体自己坐标系的dir方向,相当于世界的什么方向。
  • 这个方法必须是某个游戏物体的transform才能“点”出来,也就是用这个“点”出方法的物体自己的坐标系去转换世界的坐标系。
  • TransformDirection()方法不受position和scale影响。
  • 返回的矢量有长度,长度就是参数dir的长度。
  • 若dir表示位置而不是方向,则应该使用TransformPoint()转换。
  • 还有一个InverseTransformDirection(),可以简单理解为TransformDirection()的镜像反转。
  • 以上的例子不限于刚好转90°的情况,任何角度都可以算出。
  • 有没有发现,这种方法拐弯怪得比Translate(直接写参数)“急”一点,由“三”可以看出,cube仅仅在Y上转了90°,整个方向却调换了180°。
  • transform.forward/up/right这三个属性(不是Vector3的6个方向)内部其实相当于做了TransformDirection()转换。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:49:37  更:2022-09-13 11:52:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/24 21:48:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码