关于Unity中的transform组件(一)
一、transform组件用途
1.维护场景树
2.对3D物体的平移,缩放,旋转
二、场景树定义
在Hierarchy视图中显示的:
一个game_scene场景,下面有Main Camera节点,Directional Light节点,game_root节点,game_root节点下又有Cube子节点,Sphere子节点,组成game_scene场景树。
三、组件和节点
1.每个节点都有一个transform组件
2.每一个继承自MonoBehaviour的组件都有一个数据成员指向这个节点的transform组件。
使用this.transform;获得。//可以通过任何一个组件来获得每一个节点的transfrom组件。
同理,由于每一个继承自MonoBehaviour的组件都有一个数据成员gameObject指向组件实例所挂载的场景的节点对象,transfrom它也是一个组件,所以它也有一个gameObject指向它挂的节点。
使用this.transform.gameObject获得。//Debug.Log(this.transform.gameObject.name);
3.每一个继承自MonoBehaviour的组件都有一个数据成员gameObject指向组件实例所挂载的场景的节点对象,使用this.gameObject获得。
Debug.Log(this.gameObject.name);//节点名字
Debug.Log(this.gameObject.layer);//节点所在层名字
Debug.Log(this.gameObject.tag);//节点的标记或标签值
Debug.Log(this.gameObject.activeSelf); // 自己这个属性是否可见,自己节点名字旁边的勾是否打了,结果是true或false
Debug.Log(this.gameObject.activeInHierarchy); // 自己在这个体系里面是否可见,也就是如果它的父节点设置为不显示,自己还是可见的,那么它的activeInHierarchy就是不可见,结果是true或false
this.gameObject.SetActive(true);//设置节点为可见
4.总结
一个节点上挂载的所有组件实例,包括transform组件实例都有一个数据成员(transform)指向transform组件,所有组件实例,包括transform组件实例都有一个数据成员(gameObject)指向该节点。
所以经常用this.tranform,this.gameObject获得。
5.场景树的构成过程
每一个节点都有一个transform组件,一个父transform组件下面有好多子transform组件,而每一个transform组件都指向一个节点,在transform组件构成transform时,另一方面也间接构成了节点树。
五、使用transform组件访问孩子节点
所以可以用transform组件,来访问或者获得节点下面的所有孩子节点
方法1
比如找到game_root节点下的Cube节点,在game_root节点的game_scene组件的start方法里面写
Transform trans = this.transform.Find("Cube");//找到孩子transform组件里节点名叫Cube的transform组件
GameObject cube= trans.gameObject;//通过Cube的transform组件再得到它的gameObject节点
Debug.Log(cube.name);//输出Cube节点名字
方法2
Transform trans = this.transform.FindChild("Sphere");
GameObject sphere= trans.gameObject;
Debug.Log(sphere.name);
方法1和2的区别是
find可以多层嵌套查询,可以查孙子节点,孙子的孙子节点,只要加上路径,可以找到节点树的任何节点,不是自己的子节点也可以。
FindChild只能查自己的子节点。
多层节点查询要写路径
Transform trans = this.transform.Find("Sphere/test");//Find如果是自己的子节点或者孙子节点,可以不加前面的路径,只要一个test就可以找到
GameObject test = trans.gameObject;
Debug.Log(test.name);
方法3
this.transform.GetChild(0).gameObject.name;//0代表第一个子节点的transform组件,1代表第二个,以此类推,性能比find好一些,但是我们通常用find
子节点数
//查找一个父节点到底有多少个子节点,或者叫子transform组件
Debug.Log(this.transform.childCount);
六、使用transform组件访问父亲节点
子节点找父节点也是先找到子节点的transform组件,再得到父亲的transform组件,最后得到父亲的gameObject节点
Transform trans = this.transform.Find("Sphere/test");
Debug.Log(trans.parent.gameObject.name);
所以每一个transform组件实例还有一个数据成员(parent)指向父节点的transform组件。
Main Camera,Directional Light,game_root这些节点都是没有父节点的,他们的transform组件也没有父亲的transform组件
七、使用GameObject查找节点
// 基于GameObject的查找,来找GameObject,全局查找,GameObject.Find静态函数
Debug.Log(GameObject.Find("game_root/Sphere/test").name);
八、使用Tag查找节点
// 基于Tag的全局查找,如果有多个节点的Tag是一样的,那么先找到的,先返回,查找的顺序好像不是是按顺序从上到下的,深的子节点反而先找到
Debug.Log(GameObject.FindWithTag("game_root").name);
Debug.Log(GameObject.FindWithTag("test").name);//多层嵌套的没关系,只要用自己的Tag查找就行了
// 如果有多个节点,都是同样的tag,会发生什么样的事情呢?
GameObject[] game_sets = GameObject.FindGameObjectsWithTag("test");//返回的是一个放着GameObject类型元素的数组
for (int i = 0; i < 2; i++) {
Debug.Log(game_sets[i].name);//先子后父
}
九、绝对坐标和相对坐标(世界坐标和局部坐标)
1.我的家在地球上东经10,北纬10(世界坐标)
2.我在我家往北100米(相对坐标)
1+2=我的世界坐标
获得节点的坐标位置
Debug.Log(this.transform.position);//(0,2,10)//Unity编辑器里面的postion是相对坐标,可是代码里面的postion是绝对坐标,也就是说这里的position是绝对坐标
相对坐标是
Debug.Log(trans.localPosition); // (0, 2, 0)
十、forward,right,up
把物体想象成一个人,本来这个人的x,y,z坐标轴的指向是和世界的x,y,z坐标轴的指向是重合的,x代表right,y代表up,z代表forward
如果把物体旋转一个角度,这时候就像人转一个角度,人的左右上都改变了,所以这时候forward,right,up的方向都变了
Debug.Log(trans.forward);//结果是一个向量,也就是一个三维坐标
Debug.Log(trans.right);
Debug.Log(trans.up);
十一、距离上一次刷新的时间
// Update is called once per frame
void Update () {
float dt = Time.deltaTime; // 距离上一次刷新的时间
}
void FixedUpdate() {
float dt = Time.fixedDeltaTime; // 物理引擎固定更新的时间间隔
}
关于Unity中的transform组件(一)的更多相关文章
- 关于Unity中的transform组件(三)
game_root节点下右一个Cube子节点,和一个Sphere节点,脚本挂载在game_root下 四元数:(1)Quaternion rot (2)this.cube.rotation 欧拉角:V ...
- 关于Unity中的transform组件(二)
在Scene视图中的蓝色网格,每一格默认是1米 一.沿着Z轴每秒移动10米 Transform cube_trans; void start(){ this.cube_trans=this.trans ...
- unity中Event Trigger组件应用代码
using UnityEngine; using System.Collections; using UnityEngine.Events; using UnityEngine.EventSystem ...
- Unity中的Transform Gizmo中的Pivot和Center
选择中心(Center)意味着使用当前所选所有物体的共同轴心, 选择轴心(Pivot)意味着将使用各个物体的实际轴心 区别在于是否选中了多个物体或者有层级关系的物体. 第一张图是Center,中心在组 ...
- unity中遍历Transform的子物体
1.遍历Transform直接子transform private void Start() { var Equipment = building.transform.FindChild(" ...
- Unity UGUI——Rect Transform组件(基础属性)
基础属性:Width.Height.Pivot图示 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fo ...
- Unity编程标准导引-Unity中的基本概念-2.1界面概览
Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...
- unity中实现三个Logo图片进行3秒钟的若隐若现后互相切换Logo图片
private List<Sprite> storeTexture; public void Start() { storeTexture = new List<Sprite> ...
- unity3d中Transform组件变量详解
Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...
随机推荐
- MP3文件头格式
MP3文件结构及编解码流程 http://blog.sina.com.cn/s/blog_67b7cb7b01018i2l.html http://blog.csdn.net/liuyan4794/a ...
- spring测试实例
我们以前要进行单元测试,必须先得到ApplicationContext对象,再通过它得到业务对象,非常麻烦,重复代码也多.基于spring3的单元测试很好的解决了这个问题 基于spring3的单元测试 ...
- QtGui.QFileDialog
The QtGui.QFileDialog is a dialog that allows users to select files or directories. The files can be ...
- Object.create(null) 和 {} 区别
Object.create(null) 创建一个空对象,此对象无原型方法. {} 其实是new Object(),具有原型方法. 应用: 使用Object.create(null)的一个重要应用是:创 ...
- Redis源代码剖析和凝视(八)--- 对象系统(redisObject)
Redis 对象系统 1. 介绍 redis中基于双端链表.简单动态字符串(sds).字典.跳跃表.整数集合.压缩列表.高速列表等等数据结构实现了一个对象系统,而且实现了5种不同的对象,每种对象都使用 ...
- linux 16进制 产看文件
hexdump - ascii, decimal, hexadecimal, octal dump 查看十六机制的首选工具. -c 每单元以字节为单位,显示出对应的ASCII码 -C 每单元以字 ...
- 【bat】通过for循环复制一张图片100次
代码如下: @echo off set "F=1" cd C:\Users\Thinkpad\Desktop\img for /L %%F IN (1,1,100) DO COPY ...
- 【linux】Linux查看各类日志
Log位置: /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/ma ...
- Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50518, now running 50641. Please use mysql_upgrade to fix this error.
出现问题: Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50518, now runn ...
- 解决Sping 框架 Controller@Value获取不到值
原因:要获取 int.properties 中的数据 但是 一直拿不到值 如下代码 使用这种方式注入 *.properties文件 <!-- 引入配置文件 --> <context: ...