Unity脚本 --- 常用API(常用类) --- Component类和Transform类

news2024/11/23 11:30:06

 Unity核心类图

 上面这个是Unity核心类图 


第一部分 --- Component类 

提供了查找组件的方法(当前物体的,子物体,父物体的)

1.颜色(color)是材质(meterial)控制的,meterial(材质)是由Mesh Renderer(网格渲染器)组件控制的

2.在程序中设置颜色的时候并不是用的1-255这个数值区间,而是用0-1这个数值区间,如果美工给了1-255区间的颜色数值的话,我们要按照比例将数值转换为0-1区间的对应数值

如美工给了100,则设要转换的值为x,则有 100/255 = x / 1 ---- 通过转换式求出的 x 就是我们程序中实际设置的值

3.在脚本中访问其它组件的时候,要用 this(表示是本脚本访问) . GetComponet<要找的组件对应的类名> --- 这个方法是Component类中的方法,作用是找到对应类的引用。

返回的是对应组件的引用,没有就返回空(注意Type的意思是标签)

 

 上面这行代码的作用是获取脚本目前挂载的游戏物体上的所有组件的引用(以数组的形式返回,同时脚本也是组件)

1.深度首先搜索改为深度优先搜索

2.之所以提一句深度优先搜索,是因为这个方法找组件的时候是先从自身开始找起的。

对于不带s的版本,如果在自身找到的话则直接返回自身的对应组件,结束查找;如果找不到的话再从下一级子物体的组件中找,找到返回,结束查找,找不到继续去下一级子物体找...依次类推

对于带s版本则是从自身开始,到最后一层中的最后一个子物体结束,将所有对应的组件引用打包以数组的形式返回

 注意这个方法还有一个带 s 的版本,二者之间的区别就是不带s是返回一个组件引用或子对象,而第 s 则是返回所有组件引用和子对象

 使用场景:找子物体的某个组件;使用条件:只有子物体具有这个组件

与Children相对应的还有一个Parent版本,这个版本其实就相当于Children版本的逆过程,从自身开始查找,到第一层的父物体(第一层只能有一个父物体)结束,其它相同。 

1.要传的参数是一个标签实例 

2.这行代码实现的功能是将调用方法的对象 other的标签 与 我们传的标签实例 player进行比较,若相同返回true,否则返回false


第二部分 --- Transform类

可查找的变换组件对象包括父物体,子物体和根物体的变换组件对象 --- 其中查找子物体又分为通过索引和通过名称两种方式,而父物体和根物体都是通过点操作符 + 属性名获得(parent 和 root)

可改变的是位置,旋转和缩放

缩放指的是缩放的比例

 1.每一个游戏物体都有一个transform组件,通过这个组件我们可以改变游戏物体的位置,旋转和缩放,同时我们也可以通过这个组件去遍历和访问该游戏物体的子物体的transform组件(注意!!只能遍历到该游戏物体的第一代子物体,第二代子物体往后都遍历不到(即子物体的子物体)

遍历实例如下:

 1.通过脚本访问继承过来的transform引用(该引用指向一个实例化的transform组件对象,该对象中存在一个数组,数组中装的是指向游戏物体的所有第一代子物体的transform组件的引用)

2.用foreach方法遍历数组中的每一个引用,并通过引用访问和操作第一代子物体的transform组件 

  注意position获取的是游戏物体在世界坐标系中的位置

 这里的localPosition获取的则是游戏物体相当于其上一级父物体的坐标系中的位置

点击Unity左上角的三个点可以切换Unity的运行模式,切换之后的变化如下:

子物体的transform组件的positon,rotation等都是相对于上一级父物体的坐标系的,应有local前缀,但是在Normal模式下,没有前缀显示,而在Debug模式下则有local前缀显示。 

ps:哪怕是第一层父物体,其postion,rotation,scale都是有local前缀的,此时的第一层父物体相对的坐标系是世界坐标系

1. 第一层游戏物体的position和localposition是相同的,而再往下一层后就不相同了

2.轴心点指的是物体坐标系的原点,这个点默认在物体的中心,且我们可以自己改动轴心点的位置

(黄,红,蓝三线的交点就是轴心点,默认物体中心,位置可变)

1.rotation和positon一样,分为相对于世界坐标系的无前缀,和相对于父物体的有local前缀

2.但是scale则不同,他分为 localScale 和 lossyScale 

localScale:相对于父物体缩放比例(对于第一层父物体,其模型放进来后scale默认为1比1比1,若调整该scale则是模型相对于一开始的自身进行缩放,比如调为1比2比1时,模型的y轴方向长度就会变为原来的两倍

比如local 为 1 2 1 ,则表示的是子物体相对于父物体的x轴方向长度为1比1,y轴方向长度为1比2,z轴方向长度为1比1

(意思就是和父物体的x,z轴方向长度一样,但y轴方向长度是父物体的两倍)

3.localScale 和 lossyScale 还有一个区别就是localScale为可读可写,而lossyScale则为只读不写

接下来介绍Transform类的方法

1.Translate方法,输入一个参数 --- 同时包含距离和方向的向量,就可以将物体移动到对应的位置

注意!移动方式是平移(物体本身不会发生转动)

 

1.如果我们希望这个向量是基于世界坐标系的话,我们还需要添加一个参数 --- Space.Self / World

如果是要表示世界坐标系的话则选World,如果是自身的坐标系的话就选Self

1.注意上面第一个10°改为1°

2.此处介绍的是如何如何通过Transform类来控制旋转

3.对于Rotate方法,单位是°度

1.如果想让物体绕某个点,某个轴旋转的话,我们需要使用RotateAround方法

2.这个方法具有两个三个参数 ,分别是:三维点,表示轴方向的法向量(该法向量在世界坐标系中汇出),旋转角度

3.三个参数表示的意思是:以给定三维点作为原点,将法向量平移到该三维点处形成一个轴,然后游戏物体绕该轴作旋转(和“原点”距离不变,旋转给定角度)

除了通过Transform类改变游戏物体的位置,旋转和缩放外,它还提供给我们一些方法去查找与游戏物体相关的其它游戏物体的变换(transform组件)

1.上面第一个transform.root的作用是获得当前脚本挂载的游戏物体的根物体的变换组件

首先,一个游戏物体的根物体是指该游戏物体对应的最源头的那个父物体,即第一层游戏物体(有且只有一个),该游戏物体的根物体是其本身

2.变换组件在这里指的是一个实例对象,该对象所属的类是Transform类

3.当然除了获取根物体变换组件外,我们还可以直接获取其父物体变换组件,操作方式与上相同 

1.除了获取游戏物体的父物体,根物体的变换组件之外,我们还可以通过变换组件来为游戏物体指定一个父物体(注意这个游戏物体本身不能有父物体)

2.操作方式如上。我们需要传两个参数:

第一个参数是指向某个游戏物体(作为父物体)的变换组件对象的引用。

一.传这个引用的方式有两种,一种是直接将特定的,指向游戏物体的变换组件的引用作为参数传递,这个方法的缺点是传的引用是定死的,在内部已经定好了。

二.第二种方法是建立一个具有公共权限的Transform引用,然后将这个不指向任何变换组件的引用作为参数传递。

这样做了之后就会在游戏物体的组件面板的脚本的位置处出现一个可选择框

这个框的名字就是我们创建的引用的名字,我们可以往这个框中拖入游戏物体(除脚本挂载的游戏物体本身的父子物体) ,此时就相当于将该游戏物体的变换组件对象传给这个引用指向

3.第二个参数是一个bool值:

当bool值为true的时候,则表示作为子物体的游戏物体(即脚本挂载的游戏物体)其旋转,缩放和位置依然是相对于世界坐标系的

但当bool值为false的时候,则是相对于父物体的本地坐标系的。

举个例子就是假设物体A相对于世界坐标系的位置为0,1,0,B则是0,2,0

若B设为A的父物体,则为true时,A的位置等依旧相对于世界坐标系,不发生改变,为0,1,0

为false时,A的位置等变为相对于B的本地坐标系,此时在面板中数值不变依然为0,1,0,但这个数值是相对于B的本地坐标系的数值,相对于世界坐标系的数值已经变为了0,3,0了

(PS:如果为ture的话也可以不写这个参数,因为这个参数有默认值,且默认值为ture)


讲完父物体之后我们开始讲子物体

这个方法需要传一个字符串参数 --- 本质是通过子物体的名字来查找子物体,查找到后返回的是对应子物体的变换组件对象(Transform组件) --- 对象要用对应的引用来接收。

1.需要注意的是这个方法只能够找到孩子(第一层子物体),孙子再往后的都找不到       

2.如果想要找到第二层,第三层,第四层....子物体的话,需要通过写路径的方法来查找

比如B是A的子物体,C是B的子物体,如果我们在A上挂载脚本要找C的话,传的字符串参数应该为“B物体的名称/C物体的名称” --- 其它类似

使用这个方法找孙子有一个前提:就是父子物体路径绝对不会发生改变时再写,不然的话会出现查找错误                                    

 

第二种找子物体的方法 --- 索引查找方法 --- GetChild()

1.使用索引查找法的前提是知道游戏物体自身具有多少个子物体 ---

有一个transform类中有一个属性记录了游戏物体有多少个子物体 

1.只能够获取儿子(第一层子物体),不能够获取孙子等 

2.第一个子物体的索引是0,第二个是1.....总的子物体个数等于 childCount,,最后一个子物体的索引是 childCount - 1

3.将索引传给GetChild就能够找到对应的子物体

该方法是将挂载该脚本的游戏物体与其子物体之间的父子关系解除 

 

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

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

相关文章

【FreeRTOS】在Cortex-M4开发板上移植FreeRTOS并且实现LED灯闪烁(保姆级教程)

相信有不少小伙伴手上只有M4的开发板&#xff0c;想要移植FreeRTOS&#xff1b;但是&#xff0c;网上大部分都是M3移植教程。因此&#xff0c;陷入深深的迷茫中&#xff0c;难不成只能使用仿真了&#xff1f;&#xff1f;&#xff1f;&#x1f914;因此&#xff0c;小编特意写了…

【Linux】静态库和动态库

Linux为什么不允许普通用户给目录建立硬链接呢&#xff1f; 系统层面上有.和…硬链接指向目录。假设我们是超级用户&#xff0c;允许给目录建立硬链接&#xff0c;给根目录建立硬链接&#xff0c;从根目录开始查找&#xff0c;当查找硬链接的时候就是根目录&#xff0c;这时候递…

面试官让我聊聊 MQ 的数据丢失问题,没想到水这么深。。。

目录 一、背景引入二、Kafka分布式存储架构三、Kafka高可用架构四、画图复现Kafka的写入数据丢失问题五、Kafka的ISR机制是什么&#xff1f;六、Kafka写入的数据如何保证不丢失&#xff1f;七、总结 一、背景引入 这篇文章&#xff0c;给大家聊一下写入Kafka的数据该如何保证…

Git常用命令(全局设置获取仓库)

新建仓库: 填写名称等信息&#xff0c;根据需要选择私有&#xff0c;开源等选项。 创建完成。 邀请成员&#xff1a; Git常用命令 Git全局设置 首先要做的是设置用户名和email地址。这是非常重要的&#xff0c;每次Git提交都会使用该用户信息。 设置用户信息&#xff1a; …

岁末年初捷报频传 HashData斩获多项行业殊荣

凯歌高奏辞旧岁&#xff0c;数据赋智谱新篇。 刚刚过去的2022年&#xff0c;面对充满变数的外部环境&#xff0c;HashData始终坚持以技术为本&#xff0c;持续全面创新&#xff0c;适应数字经济发展趋势&#xff0c;笃行致远&#xff0c;砥砺前行&#xff0c;积极推动企业“上…

VPS融合怪测评脚本(主体已完善,历史遗留问题解决时间未知)(VPS fusion monster evaluation script)

ecs 原仓库链接&#xff1a;https://github.com/spiritLHLS/ecs 支持系统&#xff1a;Ubuntu 18&#xff0c;Debian 8&#xff0c;centos 7&#xff0c;Fedora&#xff0c;Almalinux 8.5, Arch 融合怪测评脚本 bash <(wget -qO- --no-check-certificate https://gitlab.…

Sealer 0.9 :帮助集群和分布式应用实现 Build、 Share、Run

作者&#xff1a;sealer 社区 新春之际&#xff0c;很高兴在此时宣布 Sealer [ 1] 0.9 版本的正式发布。Sealer 是一款致力于探索面向分布式应用的快速打包、交付和运行的解决方案。2021 年5月 Sealer 项目正式开源&#xff1b;短短一年时间&#xff0c;Sealer 在 2022 年 4 月…

人工智能图像识别四大算子

文章目录背景引入图像识别发展简介边缘检测算法*Prewitt算子**Sobel算子**Laplace算子**Conny算子** 文末寄语*背景引入 图像识别是当今计算机科学最热门的研究方向之一。随着科学技术的发展和人类社会的不断进步&#xff0c;图像识别技术在很多行业得到了广泛的应用。本章除了…

【单链表】数据结构,详解单链表,java实现代码

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#x1f353;&#x1f353;&#x1f353;&#xff0c;今天我和大家一起了解一下数据结构中的链表&#xff0c;链表&#xff0c;顾名思义是用链子把一个个数据串连起了的&#xff0c;那么链表和顺序表又有什么不同呢&#xff1f;…

mysql存储过程基本语法

本文来说下mysql存储过程基本语法 文章目录基本语法使用实例变量的使用变量定义declare语句变量赋值用户变量存储过程的参数in 输入参数out 输出参数inout输入输出参数本文小结基本语法 存储过程就是具有名字的一段代码&#xff0c;用来完成一个特定的功能。创建的存储过程保存…

2022年全球白帽常用工具排行榜TOP 10

虽然此时还未到2022年年底&#xff0c;但并不妨碍我们整理一份2022年全球白帽常用的工具榜单&#xff0c;希望能给白帽们和企业安全人员们带来一定的借鉴和参考。 一方面&#xff0c;工具的重要性不言而喻&#xff0c;各大SRC的白帽们也有深刻的切身体会。一个好用且靠谱的工具…

带模糊加工时间的柔性作业车间调度理论和GA复现(python)

文章目录1.模糊作业车间1.1 模糊数1.2 三角模糊数操作1.3 模糊甘特图2.FJSP模糊加工时间GA2.1 GA算法设置2.2 python代码2.3 测试结果1.模糊作业车间 1.1 模糊数 论域X上的模糊集合A由隶属度函数u(x)表示&#xff0c;u(x)取值[0,1]。如果A为三角模糊数&#xff0c;A可以表示为…

软件测试复习07:软件测试过程

作者&#xff1a;非妃是公主 专栏&#xff1a;《软件测试》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录测试计划测试设计测试执行测试监控测试结束软件测试过程主要有5个阶段&#xff1a;测试计划、测试设…

《深入浅出计算机组成原理》学习笔记 Day3

ELF和静态链接1. 程序执行&#xff1a;编译、链接和装载2. ELF 格式和链接3. 总结延伸参考1. 程序执行&#xff1a;编译、链接和装载 有这么两个C文件&#xff1a; \\ add.c int add(int a, int b) {return a b; }\\ test.c #include <stdio.h> int main() {int a 1;…

JVM学习(三):聊聊内存泄漏(memory leak)

一、什么是内存泄漏&#xff08;memory leak&#xff09;可达性分析算法来判断对象是否是不再使用的对象&#xff0c;本质都是判断一个对象是否还被引用。那么对于这种情况下&#xff0c;由于代码的实现不同就会出现很多种内存泄漏问题&#xff08;让JVM误以为此对象还在引用中…

最新光速配置VScode运行C/C++教程(W11适用)

文章目录1.下载MingW编译器&#xff1a;2.解压7z压缩文件方法3.VScode配置4.下面看看成果&#xff1a;1.下载MingW编译器&#xff1a; 下载地址 往下面拖找到上面这个东西-下载最新版本 2.解压7z压缩文件方法 7z解压程序官网 下它&#xff01;相信这个时候在装的一般都是6…

【ubuntu | cuda】ubuntu22.04 安装cuda11.3方法

every blog every motto: You can do more than you think. 0. 前言 ubuntu22.04 安装cuda11.3方法记录 1. 正文 1.1 方法一&#xff1a; https://developer.nvidia.com/cuda-11.3.0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&…

服务网格领域的百花齐放,是否存在一个更优解?

作者lingsamuel&#xff0c;API7.ai 云原生技术专家&#xff0c;Apache APISIX Committer。 作者林志煌&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX contributor。 服务网格是一种技术架构&#xff0c;它用于管理微服务系统中各个服务之间的通信&#xff0c;旨在…

关于volatile和gcc 优化的的思考

volatile是一个特征修饰符&#xff08;type specifier&#xff09; volatile的作用是作为指令关键字&#xff0c;确保本条指令不会因编译器的优化而省略&#xff0c;且要求每次直接读值。这是百度百科的介绍&#xff0c;那编译器是具体是怎么优化的呢。我们知道gcc 是有O0 O1 O…

torch.nn.MSELoss扒开看看它

目录官网介绍Toy默认参数定制参数预测问题-线性回归官网介绍 Toy 设X,Y∈Rnd\mathbf{X} , \mathbf{Y} \in \mathbf{R}^{n\times d}X,Y∈Rnd&#xff0c;假设其中X\mathbf{X}X是模型的输入&#xff0c;Y\mathbf{Y}Y是真实标签 默认参数 torch.nn.MSELoss(size_averageNone, r…