Unity脚本中有很多方法可以访问其他的游戏对象和游戏组件,各类方法如下:
方式一.通过在属性面板上指定参数获取游戏对象
在代码中声明public类型的游戏对象引用,属性面板中就会显示这个游戏对象参数,然后就可以将需要获取的游戏对象拖动到属性面板的相关参数位置,具体如下:
实现:获取游戏对象上的Test脚本组件,然后执行doSomething.
public class NewBehaviourScript:Monobehaviour{//声明类
public GameObject otherObject;//游戏对象引用
voidUpdate(){
Test test=otherObject.GetComponent<Test>();
test.doSomething;
}
方式二.确定对象的层次关系
游戏对象在Hierarchy面板中存在父子关系,在代码中可以通过获取Transform组件来找到其子对象或者父对象,实例代码如下:
public class NewBehaviourScript:Monobehaviour{//声明类
void Update ()
{
transform.Find("feet").Translate(0,0,1);//找到feet子对象,并将其沿着z轴移动一个单位
transform.parent.Translate(0,0,1);//找到父对象,并将其沿着z轴每帧移动一个单位
//一旦成功获取到子对象,就可以通过GetComponent方法获取feet对象的其他组件
transform.Find("feet").GetComponent<"Test>().a=3;//找到feet子对象,同时设置Test脚本中的变量a为2
transform.Find("feet").GetComponent<"Test>().doSomething()//找到feet子对象,并执行其doSomething方法
transform.GetComponentInParent<Test>().doSomething();//调用父对象的doSomething方法
transform.GetComponentInChildren<Test>().doSomething();//调用父对象的doSomething方法
//也可以使用脚本来循环获取所有的子对象,然后对子对象进行操作
foreach(Transform child in transform)//循环获取所有子对象
{
child.Translate(0, 0, 1);//对子对象进行z轴移动1一个单位
}
}
方式三.通过名字活或标签获取游戏对象
在unity脚本中,可以使用FindWithTag方法和Find方法来获取游戏对象,FindWithTag方法用于获取指定标签的游戏对象,Find方法用于获取指定名称的游戏对象,示例如下:
public class NewBehaviourScript:Monobehaviour{//声明类
GameObject name =GameObject.Find("somename");
name.tranform.Translate(0,0,2);
tag.GetComponent<Test>().doSomething();
GameObjet tag=GameObject.FindWithTag("sometag");
tag.tranform.Translate(0,0,2);
tag.GetComponent<Test>().doSomething();
}
方式四.通过传递参数来获取游戏对象
一些事件回调方法的参数中包含了特殊的游戏对象或者组件信息,例如触发碰撞事件的Collider组件。
在OnTriggerStay方法的参数中有一个碰撞体参数,通过这个参数能获取碰撞的刚体,示例代码如下:
public class NewBEhaviourScript:MonoBehaviour{//声明类
void OnTriggerStay(Collider other){//重写OnTriggerStay方法
if (other.GetComponent<Rigidbody>())
{//如果该游戏对象上有Rigidbody組件
other.GetComponent<Rigidbody>().AddForce(0, 0, 10);//给刚体施加一个力
}
//或者通过Collider组件获取游戏对象上挂载的mainview脚本,示例代码如下:
if (other.GetComponent<Test>())
{
other.GetComponent<Test>().doSomething();//调用mainView脚本上的doSomething方法
}
方式五.通过组件名称获取游戏对象
在unity脚本中可以通过FindObjectsOfType方法和FindObjectOfType方法来获取挂载特定类型组件的游戏对象。
FindObjectsOnType:可以获取所有挂载指定类型组件的游戏对象;
FindObjectOnType:只能获取挂载指定类型组件的第一个游戏对象;
public class NewBEhaviourScript:MonoBehaviour //声明类
{
void Start()
{
Test test = FindObjectOfType<Test >();//获取第一个找到的Test组件
Test[] tests = FindObjectsOfType<Test>();//获取所有的Test组件
foreach (Test test1 in tests)
{
Debug.Log(test1.gameObject.name);//输出挂载Test组件的所有游戏对象的名称
}
}
}