一、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组件(一)的更多相关文章

  1. 关于Unity中的transform组件(三)

    game_root节点下右一个Cube子节点,和一个Sphere节点,脚本挂载在game_root下 四元数:(1)Quaternion rot (2)this.cube.rotation 欧拉角:V ...

  2. 关于Unity中的transform组件(二)

    在Scene视图中的蓝色网格,每一格默认是1米 一.沿着Z轴每秒移动10米 Transform cube_trans; void start(){ this.cube_trans=this.trans ...

  3. unity中Event Trigger组件应用代码

    using UnityEngine; using System.Collections; using UnityEngine.Events; using UnityEngine.EventSystem ...

  4. Unity中的Transform Gizmo中的Pivot和Center

    选择中心(Center)意味着使用当前所选所有物体的共同轴心, 选择轴心(Pivot)意味着将使用各个物体的实际轴心 区别在于是否选中了多个物体或者有层级关系的物体. 第一张图是Center,中心在组 ...

  5. unity中遍历Transform的子物体

    1.遍历Transform直接子transform private void Start() { var Equipment = building.transform.FindChild(" ...

  6. Unity UGUI——Rect Transform组件(基础属性)

    基础属性:Width.Height.Pivot图示 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fo ...

  7. Unity编程标准导引-Unity中的基本概念-2.1界面概览

    Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...

  8. unity中实现三个Logo图片进行3秒钟的若隐若现后互相切换Logo图片

    private List<Sprite> storeTexture; public void Start() { storeTexture = new List<Sprite> ...

  9. unity3d中Transform组件变量详解

    Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...

随机推荐

  1. keytool命令总结

    keytool 命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(目录是c: Documents and Setting用户名)和算法(DSA) keytool -genkey ...

  2. Edit Control响应全选(Ctrl+A)

    MFC中的Edit控件用于输入数据,当输入的数据为大段数字的时候,全选功能就显得非常重要了,可偏偏在MFC中Edit控件就不 支持全选.Ctrl+A不行,双击也不行. Ctrl+C和Ctrl+V都是默 ...

  3. 算法笔记_026:折半查找(Java)

    目录 1 问题描述 2 解决方案 2.1 递归法 2.2 迭代法 1 问题描述 首先,了解一下何为折半查找?此处,借用<算法设计与分析基础>第三版上一段文字介绍: 2 解决方案 2.1 递 ...

  4. Mysql Field * doesn't have a default value解决方法

    Mysql Field * doesn't have a default value解决方法 MySQL 5中,出现错误提示: Field 'id' doesn't have a default va ...

  5. filter中的dispatcher解析

    两种include方式 我自己写了一个original.jsp,另外有一个includedPage.jsp,我想在original.jsp中把includedPage.jsp引进来有两种方式: 1.& ...

  6. Android 应用开发实例之情景模式

    2013-07-01 Android 应用开发实例 1. 情景模式 使用TabHost来实现主界面的布局. 设置一组RadioButton来切换不同的情景模式. 对比普通情景模式,定时情景模式需要加上 ...

  7. Windows2008 R2下,应用程序池 'XXXXXXXX' 被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误。

    转:http://www.cnblogs.com/freeton/archive/2012/08/28/2660585.html http://www.hack001.com/post/151

  8. iOS 获取屏幕某个区域的截图-b

    -(void)fullScreenshots{ UIWindow *screenWindow = [[UIApplicationsharedApplication] keyWindow]; UIGra ...

  9. mosquitto ---mosquitto-auth-plug

    https://github.com/jpmens/mosquitto-auth-plug This is a plugin to authenticate and authorize Mosquit ...

  10. Android 使用Post方式提交数据

    在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...