第十一章 Unity Transform组件(上)

这篇具有很好参考价值的文章主要介绍了第十一章 Unity 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组件(上)

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

以上方法我们会在后面的案例中详细介绍。文章来源地址https://www.toymoban.com/news/detail-448977.html

到了这里,关于第十一章 Unity Transform组件(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell 第十一章

    1.写一个库函数,用定时任务调用这个库函数,每月1号执行 1.sh:  1.1.sh:   2.以免交互的方式实现 ssh 远程登录,密码错误也直接退出,不用人干预 3.以免交互的方式,实现磁盘分区、格式化、挂载

    2024年02月08日
    浏览(44)
  • Linux 第十一章

    🐶博主主页: @ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥 专栏系列: 线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux 🔥 座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录

    2024年04月28日
    浏览(21)
  • 第十一章:deque类

    deque是一种双开口的“连续空间”的容器。 deque(双端队列):是一种双开口的\\\"连续\\\"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高 。 deque并不是真正连

    2024年02月15日
    浏览(17)
  • 第十一章 请求响应

    将前端发送的请求封装为HttpServletRequest对象 在通过HttpServletResponse 在前后端分离开发中,后端每开发完一个功能,就想要对这个接口功能进行测试 由于是前后端分离开发,所以没有前端页面 我们一般是在浏览器中直接输入地址,来访问我们所开发的web应用 但是浏览器发起的

    2024年01月21日
    浏览(26)
  • C国演义 [第十一章]

    力扣链接 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false 提示: 1 = s.length, t.

    2024年02月16日
    浏览(19)
  • 第十一章 后端编译与优化

    如果我们把字节码看作是程序语言的一种中间表示形式(Intermediate Representation, IR)的话,那编译器无论在何时、在何种状态下把 Class 文件转换成与 本地基础设施(硬件指令集、操作系统)相关的二进制机器码 ,它都可以视为整个编译过程的后端。 ​ 无论是提前编译器抑

    2024年01月23日
    浏览(24)
  • ChatGPT 之言情作家:第一章到第十一章

    原文:THE CHATGPT ROMANCE AUTHOR 译者:飞龙 协议:CC BY-NC-SA 4.0 和你一样,我喜欢写言情小说,在过去的二十年里,我对流派商业小说中故事构思和作者创业的力量产生了浓厚的兴趣。 我的目标很简单。我想了解如何将故事构思应用到塑造一个引人入胜的商业小说故事中,以吸引

    2024年01月19日
    浏览(34)
  • 第十二章 Transform组件(下)

    上一章节中我们介绍了Transform组件的属性和方法。我们发现 Transform 中有right,up和forward,而 Vector3 类中也有right,up和forward,他们是一回事嘛?我们使用Forward来说明两者之间的区别。我们知道,改变游戏对象的position位置,就可以形成移动效果。如果我们让游戏对象沿着for

    2024年02月01日
    浏览(15)
  • 【OpenCV】第十一章: 图像金字塔

    第十一章: 图像金字塔 一、什么是图像金字塔¶ 同一张图片不同分辨率的子图的集合。 图像金字塔底部是待处理的高分辨率图像,也就是原始图像,顶部是低分辨率的近似图像。一般情况下,都是每向上移动一级,图像的宽和高都降低为原来的1/2 。 二、为什么要生成图像金

    2024年02月03日
    浏览(25)
  • 西瓜书读书笔记整理(十一) —— 第十一章 特征选择与稀疏学习

    11.1.1 基本概念 特征(feature) :在机器学习中, 特征 是指从数据中提取的用于描述样本的属性或信息。 相关特征(relevant feature) :对当前学习任务 有用 的属性称为 “ 相关特征 ”。 无关特征(inrelevant feature) :对当前学习任务 无用 的属性称为 “ 无关特征 ”。 冗余特

    2024年01月19日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包