Unity 中各种物体的继承关系

2021-10-18  本文已影响0人  aaa000
image.png

Conponent 类:

当前节点、父节点、子节点查找组件功能

//组件不能直接被创建,需要先有物体  再向物体中添加组件 eg:
GameObject obj = new GameObject();
Light light = obj.AddComponent<Light>();
...

//获取组件
this.transform.GetComponent<Camera>();
this.transform.GetComponent<MeshRender>().material.color = Color.red;
//获取所有的组件
var componentList = this.transform.GetComponents<Component>();

//获取 自生  和 所有子节点 所有含有MeshRanderer组件的物体
var cList = this.transform.GetComponentsInChildren<MeshRanderer>();
foreach(var item in cList)
{
    item.material.color = Color.red;
}

//获取本节点 上级所有节点的MeshRanderer组件
var pList = this.transform.GetComponentsInParent<MeshRanderer>();

Transform 类:

查找变换组件功能,改变物体的大小角度位置等。

//遍历所有的子节点Transform 组件
foreach(Transform child in this.transform){
    print(child.name);
}

//获取父节点的变换组件
Transform t = this.transform.parent;

//获取根节点的变换组件
Transform t = this.transform.root;

//设置父节点  当前物体作为世界坐标点
this.tansform.SetParent(tf,true);
//设置父节点  当前物体作为本地坐标点
this.tansform.SetParent(tf,false);

//(名字)查找子节点
Transform tf = this.transform.Find(子节点名称);
Transform tf = this.transform.Find(子物体名称/孙代物体);//谨慎使用限制了物体的层级
//根据索引查子物体
int count = this.transform.child;
for(int i = 0;i<count;i++){
    Transform tf = this.transform.GetChild(i);
}

查找一个节点下的 某一个名称的节点,通过上面的方法+递归思想 即可找到相应的节点

Transform FindChildByName(Transform tf, string name){
    int count = tf.child;
    for(int i = 0;i<count;i++){
        Transform itemTf= this.transform.GetChild(i);
         if(tf.name == name)
          {
              return itemTf;
          }
          else
          {
              this.FindChildByName(itemTf,name);
          }
    }
     return null;
}

transform.Translate(0,0,1);//沿自身的z轴正方向移动一米
transform.Translate(0,0,1,Space.World);//沿世界坐标系的Z轴正方向移动一米

//注视旋转
LookAt()

//和Translate 同理
transform.Rotate(0,0,1);
transform.Rotate(0,0,1,Space.World);
//围绕 某个点   什么轴 旋转多少度 
transform.RotateAround(Vector3.zero,Vector.forward,1);

GameObject 类:

//(物体在场景中是否被激活)
this.gameObject.activeInHierarchy  
//物体本身是否被激活
this.gameObject.activeSelf
(eg: 物体的父节点设置active为false  此时的activeInHierarchy  为false  activeSelf 为true)

//设置物体是否是激活
gameObject.SetActive(true);

layer 层
tag 标签

//在场景中根据名称查找物体(慎用 影响性能)
GameObject o = GameObject.Find("游戏物体名称");

//通过标签获取物体
GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
GameObject obj = GameObject.FindWithTag("Player");

object 类:

name 物体名称
Destroy(obj);//删除对象 组件 资源
Destroy(obj,3);//延迟3秒销毁
DontDestroyOnLoad(); 加载新场景的时候 目标不会被自动销毁
Object.FindObjectOfType<MeshRanderer>();//查找一个MeshRanderer
Object.FindObjectsOfType<MeshRanderer>();//查找所有MeshRanderer
Instantiate 拷贝一个预制体 返回拷贝后的预制体

上一篇下一篇

猜你喜欢

热点阅读