Unity3D获取GameObject上的Component教程
发表于2018-11-07
游戏开发的过程中可能有时想要去找所有包含某种Component的GameObject,那下面这篇文章就给大家介绍下获取Component方式。
1、直接将脚本挂载到 Light上,可以直接getComponent方式获取。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
GameObject go;
Light light;
// Use this for initialization
void Start () {
go = new GameObject("name");
//脚本挂载在Directional Light下,获取light方式
light = GetComponent<Light>();
light.color = Color.green;
}
// Update is called once per frame
void Update () {
}
}
2、挂载在其他GameObject上,获取Light,可将脚本Light设置为public属性,脚本上拖动相应组件到上面
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
GameObject go;
public Light light;
// Use this for initialization
void Start () {
go = new GameObject("name");
light.color = Color.green;
}
// Update is called once per frame
void Update () {
}
}
3、先找到对应GameObject,再获取组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
GameObject go;
GameObject goLight;
Light light;
// Use this for initialization
void Start () {
go = new GameObject("name");
goLight = GameObject.Find("gameobject'name");//遍历Hierarchy下面全部的对象
light = goLight.GetComponent<Light>();
light.color = Color.green;
}
// Update is called once per frame
void Update () {
}
}
注意:如果场景下包含相同的对象名字,则需要给GameObject.Find()方法可以传入绝对路径。栗子:Find(gm/gm1/Light)
/// <summary>
/// 寻找物体
/// </summary>
/// <param name="trans">作为父物体的transform</param>
/// <param name="findname">寻找的物体的名称</param>
/// <param name="_trans">找到的物体</param>
void FindChild(Transform trans,string findname,ref Transform _trans)
{
if(trans.name.Equals(findname)){
_trans = trans.transform;
return;
}
if(trans.childCount != 0){
for (int i = 0, len = trans.childCount; i < len; i++)
{
FindChild(trans.GetChild(i),findname,ref _trans);
}
}
}
