第十一章 Transform组件(上)

news2024/11/28 0:58:47

本章节我们介绍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    随时间推移将一个向量逐渐改变为所需目标。

以上方法我们会在后面的案例中详细介绍。

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

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

相关文章

Linux Ansible角色介绍

目录 角色的基础结构 角色来源与应用 Galaxy角色 系统角色 自定义角色 角色(roles)用于层次化、结构化地组织playbookroles通过标准化目录结构来装载变量文件、tasks(模块任务)、handlers(处理程序)、…

标准ACL配置

标准ACL配置 【实验目的】 掌握标准ACL的配置。 验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Gi0/0/0 192.168.2.1 255.…

大数据分析利器之Power BI,你是否已经掌握?(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【校招VIP】IT职位校招简历千万不要用两栏的模板,另外,告诉你个陷阱:越个性机会越少

前两天在简历指导的直播里,发现了不应该出现的一种简历格式问题。 有的同学喜欢用那种竖栏两栏的简历模板。 我们建议研发岗的校招,简历不要这么去写。 因为两栏的话,实际上有一个很大的问题。 因为简历上需要写项目经历,需要写…

你最关心的4个零代码问题,ChatGPT 帮你解答了!

作为人工智能(AI)新型聊天机器人模型 ChatGPT,刚上线5天就突破100万用户,两个多月全球用户量破亿,不愧为业界最炙热的当红炸子鸡。 ChatGPT 是一种语言生成模型,由 OpenAI 开发和训练。它是基于 Transform…

C语言函数大全-- s 开头的函数(1)

C语言函数大全 本篇介绍C语言函数大全-- s 开头的函数(1) 1. sbrk 1.1 函数说明 函数声明函数功能void *sbrk(intptr_t increment);它是一个 Unix 系统的函数,用于调整程序的堆空间。 参数: increment : 增加的堆空…

机器学习算法系列(五)-- 支持向量机(SVM)

机器学习算法系列之–支持向量机(揭开SVM的神秘面纱) 支持向量机(Support Vector Machine :SVM):二分类算法模型,数据集较小时,分类效果甚至优于神经网络。 其最大的特点在于&#x…

C++ muduo日志库的使用

muduo日志库的使用 一、引用二、使用方法2.1、引入头文件2.2、 启动日志库2.3、记录日志2.4、输出格式2.5、日志滚动 三、总结 一、引用 muduo是一个高性能的网络库,它的日志库采用了异步、多线程的方式来记录日志,其主要特点包括: 能够按大…

使用Pano2VR实现全景图切换和平面图效果

内容简介 本文在文章《使用Pano2VR实现背景音乐、放大/缩小、旋转、缩略图和直线/立体/鱼眼模式等》基础上,增加全景图切换和平面图效果;效果如下图(为了可以上传缩小屏幕,属于PC端运行): 实现过程 1. 运行…

【Bus】编写一个Demo虚拟的总线-设备-驱动模型

文章目录 1. 前言2. 总线驱动模型三要素2.1 总线2.2 设备2.3 驱动 3. Demo Code3.1 virt_bus_core.c3.2 virt_device.c3.3 virt_driver.c 4. 工程代码下载地址5. 参考资料 1. 前言 Linux平台为了驱动的可重用性,虚拟了很多的虚拟总线。很经典的就是platform总线&am…

Android Room数据库如何使用增删改查

先看运行效果图。 1.在app下的build.gradle。在dependencies{}闭包中添加如下依赖 //roomdef room_version "2.3.0"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version&q…

爱奇艺DRM修炼之路

01 DRM的定义和作用 DRM,即数字版权管理(digital rights management),是在数字内容交易过程中,对知识产权进行保护的技术、工具和处理过程。它的目的是防止数字内容被未经授权的用户复制、修改和分发,以保护…

解读TaskMatrix.AI

ChatGPT在广泛的开放域任务上展现出令人瞩目的强大对话、上下文学习和代码生成能力,而且它所获得的常识知识还可以为特定领域的任务生成高级解决方案概要。不过,除了更强大的学习、理解和生成能力,ChatGPT还有哪些问题需要解决呢?…

《利用光体积描记图信号的模糊递推特性估计无袖带血压的级联卷积神经网络模型》阅读笔记

目录 一、论文摘要 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一…

城市的智能进化,汇成数字中国的璀璨银河

著名城市规划理论家刘易斯芒福德在《城市发展史——起源、演变和前景》中提出,“城市从其起源时代开始便是一种特殊的构造,它专门用来储存并流传人类文明的成果。这种构造致密而紧凑,足以用最小的空间容纳更多的设施。” 他认为,城…

我们如何将 Amazon Snowcone 送入轨道

我从 4 或 5 岁起就一直是太空旅行和美国太空计划的粉丝。我记得读过关于水星和双子星座计划的文章,兴奋地看着鹰号登月舱降落在月球上。 如今,随着每次发射到达近地轨道 (LEO) 的成本似乎都在不断下降,因此有比以往任何时候都要更多的机会&…

建设元宇宙基础设施——PPIO边缘云在云渲染/云游戏的思考和实践

关于“元宇宙”的讨论越发火热,而建设元宇宙不可避免需要布设基础设施,LiveVideoStackCon 2022 北京站邀请到PPIO边缘云联合创始人——王闻宇,同大家探讨元宇宙网络时延的最优解–边缘云基础设施的架构与建设,并介绍PPIO边缘云在泛…

Kafka Broker是如何基于Reactor模式来处理海量用户请求的?

介绍 https://kafka.apache.org/0110/documentation.html 参数名描述默认值queued.max.requestsbroker全局唯一的请求队列,用来保存请求500num.io.threads用来处理请求的线程数8 参考博客 [1]

Python环境设置

在了解Python语言的历史和介绍之后,要想开始学习Python语言,还需要在计算机中安装Python编译环境,本期就来聊聊怎么在计算机中安装Python环境。 在计算机中添加Python环境的几种选择: 直接安装Python程序,即Python官…

Spring Boot配置文件

日升时奋斗,日落时自省 目录 1、配置文件作用 2、配置文件格式 2.1、使用注意 3、properties配置文件 3.1、注释中文问题 3.2、properties语法格式 3.3、读取配置文件 3.3.1、Value读取 3.3.2、PropertySource读取 3.3.3、原生方式读取配置文件 3.4、pr…