unity中访问其他游戏对象的方式有哪些?

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组件的所有游戏对象的名称
		        }
		   }
	}
  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛小龙&宙外神域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值