当前位置:   article > 正文

Unity之Transform组件_this.transform

this.transform

Unity官方文档Transform
Transform组件一
Transform组件二
Transform组件三

一. Transform组件用途

  1. 维护场景树
  2. 对3D物体的平移 缩放 旋转

二. 场景树定义

在 Hierarchy 视图中.
一个 game_scene场景.

下面有 MainCamera节点. Directional Light节点. game_root节点.

game_root节点下有:
如: Cube子节点. Sphere子节点.

组成了 game_scene场景树.

三. 组件和节点

1 每个节点都有一个 Transform组件.

2 每一个继承自MonoBehaviour的组件. 都有一个数据成员. 指向这个节点的transform组件
// 可以通过任何一个组件来获得其所属节点的transfrom组件
通过this.transform获得.

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);//设置节点为可见

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4 总结

一个节点上挂载的所有组件实例(包括 Transform组件). 都有一个数据成员 transform) 指向Transform组件.

所有的组件实例(包括Transform组件). 都有一个成员变量 gameObject 指向该节点.

所以. 经常使用 this.transformthis.gameObject 获得.

5 场景树的构成过程

每一个节点都有一个transform组件.
一个父transform组件下面有很多子transform组件.
而每一个transform组件都指向一个节点.
在transform组件构成transform时.
另一个方面也间接构成了节点树.

五. 使用transform组件访问孩子节点

可以用transform组件,来访问或者获得节点下面的所有孩子节点

方法1:

Transform trans = this.transform.Find("Cube");//找到孩子transform组件里节点名叫Cube的transform组件
GameObject cube= trans.gameObject;//通过Cube的transform组件再得到它的gameObject节点
Debug.Log(cube.name);//输出Cube节点名字
  • 1
  • 2
  • 3

方法2:

Transform trans = this.transform.FindChild("Sphere");
GameObject sphere= trans.gameObject;
Debug.Log(sphere.name);
  • 1
  • 2
  • 3

Find与FindChild的区别

  1. Find可以多层嵌套查找. 可以查找还会查找孙子节点等… 不是自己的子节点也可以!
  2. FindChild只能查找自己的子节点

多层节点查询需要些路径

方法3:

this.transform.GetChild(0).gameObject.name;
//0代表第一个子节点的transform组件,1代表第二个,以此类推,性能比find好一些,但是我们通常用find
  • 1
  • 2

子节点数

 //查找一个父节点到底有多少个子节点,或者叫子transform组件
 Debug.Log(this.transform.childCount);
  • 1
  • 2

六. 使用transform组件访问父亲节点

每一个transform组件实例还有一个数据成员(parent)指向父节点的transform组件

MainCamera,Directional Light,game_root这些节点都是没有父节点的
他们的transform组件也没有父亲的transform组件

七. 使用GameObject查找节点

// 基于GameObject的查找,来找GameObject,全局查找,GameObject.Find静态函数
Debug.Log(GameObject.Find("game_root/Sphere/test").name);
  • 1
  • 2

八. 使用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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/140672
推荐阅读
相关标签
  

闽ICP备14008679号