1.组件概览
- Unity3D = GameObject + Component
2.组件的使用
在编写C#脚本的时候,类继承的MonoBehaviour的类,他是一个基类,继承他的类都有gameObject,可以进行添加,查询,删除:
//add
gameObject.AddComponent<ParticleSystem>(); // 挂在粒子
//query
ParticleSystem ps = gameObject.GetComponent<ParticleSystem>(); // 查询组件
//下面这几种查询方法不常用
ParticleSystem[] pss = gameObject.GetComponents<ParticleSystem>(); // 返回查询的这个组件的很多个
ParticleSystem ps2 = gameObject.GetComponentInChildren<ParticleSystem>();
ParticleSystem[] pss2 = gameObject.GetComponentsInChildren<ParticleSystem>();
ParticleSystem[] pss_parents = gameObject.GetComponentsInParent<ParticleSystem>();
// delete
Destroy(ps);
3.组件的周期
unity默认有一个Start()和Update()的函数,我们需要override他。
一般比较常用的有:
private void Awake()
{
// 组件初始化,类似于构造函数
}
// start在第一帧执行,只运行一次
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnDestroy()
{
}
private void OnEnable()
{
}
private void OnDisable()
{
}
Transorm组件:
unity使用的是左手坐标系,transform的XYZ是指这个组件的中心在世界坐标系下的位置,rotation是指局部坐标系与世界坐标系之间的角度的关系。
transform可以获得gameObject的父子关系要注意一下。
// 把正方体左上角的一个顶点转换为世界坐标
Vector3 point = gameObject.transform.TransformPoint(new Vector3 (-1, 1, 1));
//Z轴永远对着dst的元件
gameObject.transform.LookAt(dst);
gameObject.transform.RotateAround(Vector3.up, 90); // 绕z轴旋转90°
Vector3 p1 = gameObject.transform.position; //返回世界坐标系下的点
Vector3 p2 = gameObject.transform.localPosition; // 返回局部坐标系下的点
Quaternion qua = gameObject.transform.rotation; // 四元数的形式
Vector3 sca = gameObject.transform.localScale; // 得到缩放
Transform par = gameObject.transform.parent; // 得到父节点
Light组件
比较常见的有直线光Directional light、点光Point light、聚光灯Spotlight。
- 顶点光:只计算顶点的光照
- 像素光:每个像素都要计算
产生阴影的条件:1.有光源,2有几个物体,3:选择产生光源的选项。
在移动端使用实时光源很消耗资源。
Camera组件
如果使用渲染纹理的功能,那么就必须使用两个相机,一个用来渲染纹理,另一个就是相机的功能。