第十一章 Transform组件(上)
本章节我们介绍Transform类,它是一个组件,每一个游戏对象有拥有该组件。因此,它值得我们重点介绍一下。Transform代表了游戏对象的世界变换,也就是移动,选择和缩放。
首先,我们先介绍它的属性(类变量),如下所示
1. gameObject 附加到的当前游戏对象,来自父类Component
2. name 当前游戏对象的名称,来自父类Component
3. tag 当前游戏对象的标签,来自父类Component
4. transform 当前游戏对象的Transform,来自父类Component
因为所有的组件都继承自Component,所以所有的组件都会有以上四个类实例变量。
接下来,我们介绍Transform组件独有的类实例变量。
position 世界空间中的变换位置,它是一个Vector3三维向量。
localPosition 相对于父级的变换位置。若无父级,等同于position。
rotation 世界坐标系中的旋转,它是一个Quaternion四元数。
localRotation 相对于父级的旋转,也是一个四元数。
eulerAngles 世界坐标系中的旋转,它是一个欧拉角(Vector3三维向量表示)。
localEulerAngles 相对于父级的旋转,也是一个欧拉角。
lossyScale 世界坐标系中的缩放,但它是只读属性,它是一个Vector3三维向量。
localScale 相对于父级的缩放,我们经常使用这个属性进行缩放操作。
因为在Unity中,游戏对象经常会组织成父子关系,因此就有了世界坐标系和相对于父级的坐标系两个概念。因为,有时候相对于父级做参考,来改变移动,选择和缩放的话,会比较简单方便。需要注意的是,在Inspector检视视图中的Transform中的position,rotation和scale是相对父级坐标系的。也就对应了上面提到的localPosition,localRotation,localEulerAngles和localScale。四元数和欧拉角是两种不同的旋转数值方式,彼此之间可以相互转化。
parent 返回父级游戏对象的变换Transform对象。
childCount 返回父级游戏对象下有多少个子游戏对象。
root 返回最顶层的父级变换Transform对象。
以上三个属性变量可以帮助我们处理游戏对象之间的父子关系,当然也可通过方法来实现。接下来,我们继续Transform组件的其他属性变量(本质是一个Vector3向量)。
right 世界空间中变换的红轴/X轴方向
up 世界空间中变换的绿轴/Y轴方向
forward 世界空间中变换的蓝轴/Z轴方向

unity世界坐标系是一个左手坐标系,上面的三个变量就对应了三根手指方向。
我们继续说明Transform的方法。
CompareTag 当前游戏对象是否使用了指定标签
GetComponent 按照类型获取一个组件
GetComponentInChildren 从子游戏对象中获取一个组件
GetComponentInParent 从父游戏对象中获取一个组件
GetComponents 按照类型获取所有组件
GetComponentsInChildren 从子游戏对象中获取所有组件
GetComponentsInParent 从父游戏对象中获取所有组件
以上方法均来自于父类Component,也就是说所有组件都有以上7个方法。我们发现,这些方法与MonoBehaviour中的方法使用是一样的(脚本也是组件嘛)。同时在GameObject类中也有类似的方法。由此可见,在Unity中有很多地方(脚本中,组件中,GameObject中)都提供了获取组件的方法。这一点希望大家不要混淆,虽然重复出现很多,但是使用场景是不一样的(后面介绍)。接下来,我们介绍Transform自己的方法:
Translate 根据Vector3向量(方向和距离)移动变换。
Rotate 根据Vector3向量选择变换。
以上两个方法用来做移动和旋转,通常这两个方法提供两个参数,一个是Vector3向量参数,另一个是坐标系参数,也就是Space.Self本地坐标系和Space.World世界坐标系。游戏对象的移动和旋转是以参考坐标系为前提的,这个就类似于Unity工具栏上面的变换按钮以及坐标系选择按钮,如果忘记的同学,可以看一看前面的章节复习一下。
关于旋转,还有另外两个方法,如下:
RotateAround 围绕穿过世界坐标中的 point 点的 axis轴旋转 angle 度。
LookAt 向target 位置进行旋转,类似于转头看向target 位置的操作。
在世界变换中,最难处理的就是旋转,Unity提供多个旋转方法也是为了我们方便操作。
关于缩放的操作,Unity并没有提供太多方法来实现,可能是因为不经常用吧。
SetParent 设置变换的父级。
IsChildOf 该变换是否为 parent 的子级。
GetChild 按索引返回变换子级。
GetSiblingIndex 获取同级索引。
SetSiblingIndex 设置同级索引。
以上方法主要用于变换Transform(等效于游戏对象GameObject)的父子层级操作。
关于Transform的其他方法我们暂且不介绍了。
接下来,我们来介绍Vector3向量。Vector3三维向量类,它既可以用来移动,也可以用来旋转,也可以用来缩放。其实,我们还应该知道Vector3既可以代表三维坐标系中的点坐标,还可以代表方向和长度(向量的本意)。大家应该明白,游戏世界的本质是数学,而向量的运算占据了游戏世界的一大部分,至少我们可以看到,游戏对象的世界变换都可以使用向量来完成。关于向量的相关运算,我们就不做详细介绍了,它的内部本质就是x,y,z三个浮点数值,与三维世界的X/Y/Z轴向一一对应。我们先直接看看Vector3类的属性变量吧。
x 向量的 X 分量。
y 向量的 Y 分量。
z 向量的 Z 分量。
magnitude 返回该向量的长度。(只读)
sqrMagnitude 返回该向量的平方长度。(只读)
normalized 返回长度为1的方向向量。(只读)
Vector3类的普通方法并不是很多,我们就不介绍了。
接下来我们看看Vector3类的静态变量(本质是一个Vector3向量)。
zero 相当于Vector3(0, 0, 0)坐标系原点
right 相当于Vector3(1, 0, 0)X轴正方向
up 相当于Vector3(0, 1, 0)Y轴正方向
forward 相当于Vector3(0, 0, 1)Z轴正方向
left 相当于Vector3(-1, 0, 0)X轴负方向
down 相当于Vector3(0, -1, 0)Y轴负方向
back 相当于Vector3(0, 0, -1)Z轴负方向
其实就是我们对于原点和六个方向的简便写法而已。
最后我们在给出Vector3类中一些常用的静态方法吧。
1. Angle返回from与to之间的角度(以度为单位)。
2. ClampMagnitude返回vector的副本,其大小被限制为maxLength。
3. Cross两个向量的叉积。
4. Distance返回 a 与 b 之间的距离。
5. Dot两个向量的点积。
6. Lerp 在两个点之间进行线性插值。
7. LerpUnclamped在两个向量之间进行线性插值。
8. Max 返回由两个向量的最大分量组成的向量。
9. Min 返回由两个向量的最小分量组成的向量。
10. MoveTowards 计算 current 指定的点与 target 指定的点之间的位置,移动距离不超过 maxDistanceDelta 指定的距离。
11. Normalize使该向量的 magnitude 为 1。
12. OrthoNormalize将向量标准化并使它们彼此正交。
13. Project将向量投影到另一个向量上。
14. ProjectOnPlane将向量投影到由法线定义的平面上(法线与该平面正交)。
15. Reflect从法线定义的平面反射一个向量。
16. RotateTowards将向量 current 朝 target 旋转。
17. Scale将两个向量的分量相乘。
18. SignedAngle返回 from 与 to 之间的有符号角度(以度为单位)。
19. Slerp在两个向量之间进行球形插值。
20. SlerpUnclamped在两个向量之间进行球形插值。
21. SmoothDamp 随时间推移将一个向量逐渐改变为所需目标。
以上方法我们会在后面的案例中详细介绍。
相关文章:
第十一章 Transform组件(上)
本章节我们介绍Transform类,它是一个组件,每一个游戏对象有拥有该组件。因此,它值得我们重点介绍一下。Transform代表了游戏对象的世界变换,也就是移动,选择和缩放。 首先,我们先介绍它的属性(…...
aac音频怎么转mp3,这几个方法很简便
对于aac来说,其是一种高级音频编码,也是专门为声音数据设计的文件压缩格式。通常来说,aac与mp3有一些不同。aac使用了全新的算法进行编码的,其整体的效率较mp3更高一些。同时,aac格式的音质较好一些。但是,…...
分屏视图上线,详情数据秒切换
分屏视图 路径 表单 >> 表单设计 功能简介 新增「分屏视图」。分屏视图是一种对数据阅读提供沉浸式体验的视图组织形式,用户可通过分屏视图更快速的查看数据详情。 使用场景: 对于数据类型是「订单」数据的表单,管理人员往往会对…...
怎么释放C盘空间?清理C盘空间的4大方法分享!
案例:怎么释放c盘空间 【朋友们,最近我的c盘空间内存严重不足了,想释放一下c盘的空间,大家有什么好的方法吗?】 在使用电脑的过程中,经常会遇到C盘空间不足的问题,这时候就需要释放C盘的空间。…...
【文件描述符|重定向|缓冲区】
1 C语言文件操作的回顾 这块博主在讲解C语言时就已经做了很详细的讲解,这里就不详细讲了,直接给出代码。 写操作: #include<stdio.h> #include<stdlib.h> #include<errno.h> #define LOG "log.txt" …...
软件测试—进阶篇
软件测试—进阶篇 🔎根据测试对象划分界面测试可靠性测试容错性测试文档测试兼容性测试易用性测试安装卸载测试安全性测试性能测试内存泄漏测试 🔎根据是否查看代码划分黑盒测试白盒测试灰盒测试 🔎根据开发阶段划分单元测试集成测试系统测试…...
设计模式:创建型设计模式、结构型设计模式
目录 前言如何学习设计模式?设计模式基础设计原则 一. 创建型设计模式1. 模板方法2. 观察者模式3. 策略模式 二. 结构型设计模式1. 单例模式2. 工厂模式3. 抽象工厂4. 责任链5. 装饰器6. 组合模式 前言 如何学习设计模式? 明确目的 在现有的设计模式上…...
如何选择多参数水质分析仪?
如何选择适合的多参数水质分析仪? 首先水质检测仪分为实验室(台式)和户外使用的便携式多参数水质检测仪。我们呢就要了解自己的需 求使用在什么领域,根据使用领域选择仪器;其次就是选择需要测定的指标,最好…...
明确自动化测试目的
明确自动化测试目的 1.提高测试人员的工作成就感和幸福感,减少手工测试中重复性的工作 目前,在大部分中小企业中,手工测试在日常测试工作占据的比例很大。测试人员必须跟随开发团队不断地进行选代式开发和测试。一个功能模块可能在整个测试周…...
DevExpress.XtraGrid.GridControl导出excel需要添加表头
string head ""; head "单号 \t" txtcCode.Text ; string foot ""; foot "制单人 \t" "制单日期 \t" "审核人: \t" "审核日期 \t" "修改人 \t&q…...
守护进程Daemon
进程组、对话期和控制终端关系 每个会话有且只有一个前台进程组,但会有0个或者多个后台进程组。产生在控制终端上的输入(Input)和信号(Signal)将发送给会话的前台进程组中的所有进程。对于输出(Output&…...
学生成绩管理系统 002
学生成绩管理系统 *****************学生成绩管理系统***************** 1、成绩添加 2、成绩输出 3、成绩查询 4、成绩统计 5、成绩排名 6、成绩删除 7、成绩修改 8、成绩按学号排序 0、退出系统 ************************************************** 请选择功能:1 **********…...
换个花样玩C++(4)细聊C++的引用精妙之处
引用是C++引入的新语言特性。而且在日常工作开发过程中,经常会使用到引用,对于一些做系统架构的架构师而言,这也是不可或缺的一门基本功,我在工作中发现,很多人并没有搞清楚引用。因此我在本篇中将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。…...
Linux安装helm
前言 运行环境:CentOS7.9 官方参考文档:官方文档 文章末尾附有一键安装脚本 下载安装包 github下载对应版本的安装包,下载地址 进入对应版本的下载页面,这里以v3.11.3为例 选择对应系统的安装包,这里以linux为例 …...
ATTCK v12版本战术介绍——防御规避(四)
一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第19-24种子技术,后续会介绍防御规避其他子技术…...
Orangepi Zero2 全志H616(DHT11温湿度检测)
最近在学习Linux应用和安卓开发过程中,打算把Linux实现的温湿度显示安卓app上,于是在此之前先基于Orangepi Zero2 全志H616下的wiringPi库对DHT11进行开发,本文主要记录开发过程的一些问题和细节,主要简单通过开启线程来接收温湿度…...
abbyy是什么软件
ABBYY,一款强大的OCR文字识别软件! 在日常的工作中,我们常常需要提取PDF或图片上的大段文字,如果字数少的话,我们可以直接手打,但如果出现大篇幅的文字,那就有点头疼了。今天,我就向…...
软件测试技术(四)白盒测试
白盒测试 白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误,…...
Java基础语法(十二):try-catch块
目录 前言 一、try-catch是什么? 二、其他异常处理机制 总结 前言 Java 异常处理机制是 Java 程序设计中至关重要的一部分。它允许程序员像处理普通数据一样处理异常,并根据异常类型采取合适的措施。其中一个非常基本的异常处理机制是 try-catch 块…...
尚融宝25-投资列表展示以及实现充值功能
目录 一、展示投资列表 (一)需求 (二)后端 (三)前端 二、充值功能 (一)需求 1、需求描述 2、流程 (二)充值 1、后端 2、前端 (三&…...
从‘噬菌体’到清晰地图:我的LIO-SAM避坑实战记录(含Ubuntu版本选择建议)
从“噬菌体”到清晰地图:LIO-SAM实战避坑指南与Ubuntu版本选择建议 第一次在RViz里看到那个旋转成筒状的地图时,我盯着屏幕足足愣了三分钟——这和我预想中的高精度点云地图相差了十万八千里。更令人崩溃的是,当我把设备搬到室外测试时&#…...
别再傻傻线性扫描了!用Python+Scikit-learn手把手实现IVFFlat图像相似度搜索
用PythonScikit-learn实现IVFFlat图像搜索引擎:从原理到实战 当你面对十万张未分类的图片库,如何快速找到与目标图片最相似的十张?传统线性扫描需要计算所有图片特征的距离,耗时呈线性增长。本文将手把手教你用IVFFlat算法构建高效…...
League-Toolkit:智能辅助驱动的英雄联盟效率提升解决方案
League-Toolkit:智能辅助驱动的英雄联盟效率提升解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Tool…...
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷 第一次用熵值法做综合评价时,我盯着屏幕上几乎相同的权重值发愣——这和教科书上"差异越大权重越高"的描述完全不符。直到深夜排查才发现,原来在数据标…...
用Artisan构建专业级咖啡烘焙解决方案:从数据采集到品质优化的全流程指南
用Artisan构建专业级咖啡烘焙解决方案:从数据采集到品质优化的全流程指南 【免费下载链接】artisan artisan: visual scope for coffee roasters 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 在咖啡产业数字化转型的浪潮中,专业烘焙师正…...
别再为ImageNet-1k 2012下载发愁了:手把手教你用迅雷+MD5校验搞定训练集和测试集
高效获取ImageNet-1k数据集的完整实践指南 在计算机视觉研究领域,ImageNet-1k数据集堪称是算法开发的"基石"。无论是训练经典的ResNet模型,还是验证最新的Transformer架构,这个包含1000个类别、超过120万张图像的数据集都是不可或缺…...
从‘Hello World’到视频监控:用QT+海康SDK开发你的第一个安防应用
从‘Hello World’到视频监控:用QT海康SDK开发你的第一个安防应用 第一次看到海康威视摄像头的实时画面在自己的程序里跳出来时,那种成就感比写一百个"Hello World"都来得强烈。作为一位刚接触QT的开发者,你可能已经厌倦了按钮和文…...
Proteus8.9 安装避坑指南:从下载到稳定运行的完整流程
1. 为什么选择Proteus8.9? Proteus作为电子设计自动化(EDA)领域的经典工具,在单片机仿真和电路设计方面一直备受工程师和学生青睐。8.9版本之所以成为众多用户的首选,主要在于它对新型单片机的支持更加完善。比如STC15…...
Hypervisor环境下高效进程间通信技术解析
1. Hypervisor环境下的进程通信挑战 在虚拟化技术大行其道的今天,Hypervisor环境下的进程间通信(IPC)已经成为系统性能的关键瓶颈。想象一下,你住在小区同一栋楼的两个单元里,明明直线距离只有10米,却要绕到…...
RWKV7-1.5B-g1a镜像优势解析:离线加载兼容+软链修复+日志分级排查设计
RWKV7-1.5B-g1a镜像优势解析:离线加载兼容软链修复日志分级排查设计 1. 平台简介与核心能力 rwkv7-1.5B-g1a是基于新一代RWKV-7架构的多语言文本生成模型,专为轻量级应用场景优化设计。该镜像经过工程化改造,在保持原模型优秀生成能力的同时…...
