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 拷贝一个预制体 返回拷贝后的预制体