Unity --- Transform类

news/2024/11/9 0:11:35/

1.一个很有意思的事实是Transform类不仅用来管理游戏物体的位置缩放旋转,还用来管理游戏物体的父物体与子物体之间的关系

当游戏物体A的trasnform类a是游戏物体B的transform类b的父类的话,游戏物体A就是游戏物体B的父物体

2.如何访问脚本当前挂载的游戏物体的transform类呢 --- 在脚本中可以直接通过transform这个类名访问

position属性记录的是当前游戏物体在世界坐标系中的的坐标 

游戏物体的transform类中的 localposition 这个属性:

1.在当前游戏物体没有父物体的时候,其值与position中的相对于世界坐标系下的坐标相同

2.当当前游戏物体有父物体的时候,其值是当前游戏物体相对于其父物体的本地坐标系的坐标

获取旋转也同理,一个是相对于世界坐标系的旋转,一个是相对于父物体的本地坐标系的旋转(如果有的话) 

ps:调用上面这两个属性得到的旋转是以四元数形式(四个参数)来表示的(当然要用四元数对象来接收)

也有获取以欧拉角形式表示的旋转(三个参数)

 也有相对于世界坐标系和相对于父物体的本地坐标系的两个对应属性

缩放只有一个相对于父物体的本地坐标系的缩放(如果没有父物体的话就是相对于世界坐标系的缩放) 

3.在Unity中一个物体都有x,y,z三个轴显示,我们一般默认Z轴是游戏物体的前方轴(forward),y轴是游戏物体的上方轴(up),红色的轴是游戏物体的右方轴(right)

 

 forward属性是一个向量,这个向量是以1.游戏物体的本地坐标系的Z轴的方向来作为自己的方向2.处于世界坐标系中的单位向量

up和right同理


4.transoform类中常用的一些方法

1.让游戏物体看向某一个坐标点 --- 注意这个方法调用一次之后能够让游戏物体看向一个坐标点,如果游戏物体转向了话,就需要我们再一次调用这个方法

如果我们想让游戏物体时时刻刻看向某个坐标点的话,就需要我们把这个方法放到Updata中,每一帧调用一次,这样子就能在刷新的画面中保证我们的游戏物体时时刻刻都是看向我们给定的坐标点的

注意这里的看向某个点是指游戏物体的本地坐标系的Z轴会指向这个点

让一个游戏物体旋转的时候我们需要给它指定一个旋转的轴 ,这个轴以向量形式表示,

且这个向量是在游戏物体的本地坐标系中求出的,该向量的起点是这个本地坐标系的原点

这个方法的功能是让我们的游戏物体绕某个点的本地坐标系中的某个向量旋转

总共有三个参数 --- 1.我们要绕的点的坐标 ; 2.过我们要绕的点的一个旋转轴,这个旋转轴是在我们要绕的点的本地坐标系中的一个向量(这个向量的起点坐标就是我们要绕的点,而我们要绕的点就是本地坐标系中的原点); 3.绕旋转旋转的角度

首先给定一个Vector3参数,这个参数起到两个作用,一个是作为游戏物体本地坐标系中的一个向量来决定游戏物体的移动方向,另一个则是作为调用一次该方法后,沿着给定方向游戏物体的移动距离


transform类管理游戏物体的父子关系

 1.获取当前游戏物体的父物体

注意下面这个索引的最终属性是gameObject,其类型是GameObject,也就是说我们找到的是一个游戏物体对象!!

--- 首先通过transform对象调用parent属性,返回一个Transform类对象,这个对象是指向第一个transform对象对应的游戏物体的父物体的tranform的,然后再对 这个transform对象索引调用gameObject属性,返回一个游戏物体对象,这个游戏物体对象指向的是父物体

2.childCount --- 获取当前游戏物体的子物体的个数

 

 在Unity中一个父物体可以有多个子物体,但是一个子物体只能有一个父物体(类的继承)

子物体也能创建自己的子物体来成为父物体

 

 调用这个放啊后会使得游戏物体与其所有子物体接触父子关系

通过transform获取子物体的tranform

 第一个是传我们要获取的子物体的transform,如果想要获取子物体游戏对象的话还需要再

trans后面加一个 . gameObject

第二个方法则是通过索引获取对应索引的子物体的transform --- 索引从0开始 

 父物体的transform变量名(再脚本中写代码的时候,脚本所挂载的游戏对象的transform变量可直接用transform表示)+ 点操作符 + GetChill(获取父物体的子物体的transform变量)

上面的子物体的索引由上到下是0,1,2

(PS:一个父物体A下有一个子物体B,这个子物体下又有一个其自身的子物体C,问C是不是A的子物体? -- 答: 不是

上面两个find和getchild都只能找属于点操作符前面的父物体的子物体,找不到就返回Null

是的话返回ture,不是返回false 

这个方法可以将括号内的transform对象对应的游戏物体设置为点操作符前面的transform对象对应的游戏物体的父物体 


http://www.ppmy.cn/news/35931.html

相关文章

Docker学习记录

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…

【小杨带你玩转C语言】(入门篇)初识C语言(下)

本章目录 每篇前言1.导语 2.目标 3.知识点 一,常见关键字       1,认识关键字       2,关键字分类           2.1,数据类型关键字             2.1.1,基本数据类型关键字             2.…

利用Rust与Flutter开发一款小工具

1.起因 起因是年前看到了一篇Rust iOS & Android|未入门也能用来造轮子?的文章,作者使用Rust做了个实时查看埋点的工具。其中作者的一段话给了我启发: 无论是 LookinServer 、 Flipper 等 Debug 利器,还是 Flutt…

【深度强化学习】(5) DDPG 模型解析,附Pytorch完整代码

大家好,今天和各位分享一下深度确定性策略梯度算法 (Deterministic Policy Gradient,DDPG)。并基于 OpenAI 的 gym 环境完成一个小游戏。完整代码在我的 GitHub 中获得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Mod…

Python是不是被严重高估了?

Python起源一种shell的脚本语言 ,而现在已经发展成最通用的语言之一了,TIOBE指数的数据显示,Python是目前世界上最受欢迎的编程语言。 Python之所以这么受欢迎有很多原因。从Web开发到物联网编程再到AI等各个方面都能用到它。另外Python代码…

解析vue中的process.env

一、介绍 1、process process是 nodejs 下的一个全局变量,它存储着 nodejs 中进程有关的信息。 2、process.env env 是 environment 的简称,process.env属性返回一个包含用户环境的对象。 3、dotenv Dotenv 是一个零依赖的模块,它能将环境变…

【Nginx】Nginx 常用的基础配置

文章目录一、基础配置二、隐藏 Nginx 版本信息三、禁止ip直接访问80端口四、启动 web 服务 (vue 项目为例)五、PC端和移动端使用不同的项目文件映射六、一个web服务,配置多个项目 (location 匹配路由区别)七、配置负载均衡八、SSL 配置 HTTPS一、基础配置 user …

uniapp - APP云打包、蒲公英平台发布APP的步骤

一、uniapp 云打包 1、注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心:登录 (dcloud.net.cn) 根据流程注册即可。 2、云打包(已安卓为例) 项目创建完成后,查看 dcloud 开发者中心,看是否…