unity 3D(2)访问游戏对象以及组件

关于脚本在代码中对游戏对象的声明类型:(这个涉及到有些情况下能不能访问的问题)

public类型的才可以在脚本挂载的对象的Inspector属性查看器中显示;private类型以及protected类型则不能在Inspector属性查看器中显示

public类型的变量和方法可以在其他所有类中使用;private类型的变量和方法只能在自身类中使用;protected类型的可以在子类和相同的命名空间中进行使用;不写类型的变量和方法只能在同一个明明空间中使用

比如我在Grid对象上挂的脚本,在里面为public类型的变量都可在属性查看器中看到:

public GameObject bus;

public Texture[] textures;

 

 

1.通过Inspector属性查看器来指定参数

这种只适合在脚本代码中声明为public类型的变量,可以在Inspector属性查看器的脚本组件下面显示,并将对应的赋值直接拖进去即可实现赋值。

eg:(挂载的游戏对象上面有一个Hello脚本)

using UnityEngine;

using System.Collections;

public class Test:MonoBehaviour{

public GameObject gameObject;

void Update()

{

Hello hello = gameObject.GetComponent<Hello>();

//下面就可以对hello进行操作调用方法和变量

}

}

这个脚本写好之后,可以直接将想要访问的游戏对象拖拽到Inspector属性查看器的相关参数然后就进行了赋值

 

2.确定层次关系,通过父子关系来找到游戏对象

在Hierarchy面板的场景中的对象列表中存在父子关系,带小箭头的为父,内为子

eg:

using UnityEngine;

using System.Collections;

public class Test:MonoBehaviour{

void Update()

{

//找到当前游戏对象的名字为name的子对象,并执行function()

this.transform.Find("name").function();

//找到父对象,并执行function()

this.transform.parent.function();

}

}

当这样找到对象之后,直接将this.transform.Find("name")和this.transform.parent看成是一个游戏对象,后面就可以像直接处理对象一样找到对象相应的组件

eg:

Hello hello=this.transform.Find("name").GetComponent<Hello>();

 

3.通过名字或者标签来获取游戏对象

FindWithTag和Find,FindWithTag是获取指定标签的游戏对象,Find是获取指定名字的游戏对象

Tips:如果对象的标签比较多,可以建一个Tags类,专门将所有的标签都存储进去,这样使用标签的时候可以直接通过Tags来进行调用。

eg:

using UnityEngine;

using System.Collections;

public class Test:MonoBehaviour{

void Awake()

{

// 获取指定名字的游戏对象

Gameobject g1 = Gameobject .Find("name");

// 获取指定标签的游戏对象

Gameobject g2= Gameobject .FindWithTag("tagName");

}

}

4.通过传递参数来获取游戏对象

一些时间的回调方法的参数中包含了特殊的游戏对象或者组件信息,例如出发碰撞事件的Collider组件,在OnTriggerStay方法的参数中有个碰撞参数,通过这个参数可以得到碰撞的刚体组件或者其他组件。

eg:

using UnityEngine;

using System.Collections;

public class Test:MonoBehaviour{

void OnTriggerStay(Collider col)

{

if(col.GetComponent<Rigidbody>())//如果该游戏对象有刚体

{

//让该刚体执行function()

col.GetComponent<Rigidbody>().function();

}

}

}

5.通过组件名称获取游戏对象

FindObjectsOfType<>()和FindObjectOfType<>()

FindObjectsOfType <>()是获取所有挂载指定类型组件的游戏对象;FindObjectOfType<> ()是获取挂载指定类型组件的第一个游戏对象

eg:

using UnityEngine;

using System.Collections;

public class Test:MonoBehaviour{

void Awake()

{

//获取挂载指定类型组件的第一个游戏对象

Hello hello = FindObjectOfType<Hello>();

Debug.Log(hello.gameObject.name);



//获取所有挂载指定类型组件的游戏对象

Hello[] hellos = FindObjectsOfType<Hello>();

foreach(Hello h in hellos)

{

Debug.Log(hello.gameObject.name);

}

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值