UnityAPI之component
Component是Unity API库里提供的一个基类,unity是一种面向组件开发的物理引擎,组件可以认为是游戏物体(GameObject)身上的某种功能,比如摄像机,他的定义就是实现了相机组件的游戏物体.组件在c#中可以认定为一个类,所有组件的父类都是Component,下面的图片展示了他们的继承关系:
需要注意的是unity不允许直接创建组件,他必须挂在GameObject,即组件的创建必须在对应GameObject的脚本上,一个GameObject的组件都必须在他挂载的脚本上.
Component里面有一个字段gameObject可以获得当前挂载的游戏物体你可以使用下面的语句打印出游戏物体名:
print(this.gameObject);
同理游戏物体也可以获得他自身的组件:
GetComponent("component-name");
GetComponent还有其他重载比如可以获得需要的组件,只需要指明组件类型就可以
GetComponent(typeof(component-name));
component-name cn=GetComponent<component-name>();
//对应返回值为组件类型的对象
找到组件后就可以修改一些组件属性
this.GetComponent<MeshRenderer>().material.color=Color.red;
obj.GetComponent<MeshRenderer>().material.color = Color.green;
//this指针就是当前挂载的游戏物体
也可以使用GetComponents()他会返回所有组件的数据
var allComponent = GetComponents<Component>();
//返回所有组件的数组
foreach(var item in allComponent)
{
Debug.Log(item.GetType());
}
GetComponentsInChildren()会从自己开始获取他的所有后代的组件
var allChildComponent=GetComponentsInChildren<MeshRenderer>();
//获得所有后代物体的所有组件(从自己开始)
//自己也会变
foreach (var item in allChildComponent)
{
item.material.color = Color.yellow;
}
如上面的例子,父母会以身作则从自己开始执行变黄,同理也会有找祖宗方法
var allParentComponent = GetComponentsInParent<MeshRenderer>();
foreach (var item in allParentComponent)
{
item.material.color = Color.blue;
}
当然还有很多方法不过常用的就这么多,可以查询帮助文档来获得这些方法的参数,返回值和用法.