如何从子GameObject获取变量/函数?

时间:2020-01-08 15:46:34

标签: c# unity3d children gameobject

你好!我正在尝试创建一个房间,该房间将从列表中生成一个随机布局,并从该布局中获取一个变量。因为从游戏开始就没有布局,所以我遇到了一些麻烦,并且我已经为这个问题研究了几天。当前,“ Room” GameObject在其子级中搜索标记为“ Layouts”的子级,然后在找到 GameObject后,代码从Layout的Layouts组件获取“ waves”变量。代码在这里:

foreach (Transform child in transform)
{
   if (child.tag == "Layouts")
   {
      layout = child.gameObject.GetComponent<Layout>();
   }
}
layout.testFunction();
totalKillsNeeded = layout.waves;

运行代码时,什么都没有发生。没有错误或任何东西。尽管我的Visual Studio显示了两个脚本之间的引用,但testFunction仍未运行,尽管我检查并查看了layout.waves等于1或2,但totalKillsNeeded返回0。返回了相同的结果。我可能没有考虑过这个小问题,但是我仍然无法弄清楚。谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码应该可以运行,但是以防万一,请尝试这样做。这是ScriptA.cs,将其放在父对象上

using UnityEngine;

public class ScriptA: MonoBehaviour
{
    int totalKillsNeeded = 0;
    ScriptB layout;

    // Start is called before the first frame update
    void Start()
    {
        foreach(Transform child in transform)
        {
            if(child.CompareTag("Layouts"))
            {
                layout = child.gameObject.GetComponent<ScriptB>();
            }
        }

        layout.testFunction();
        totalKillsNeeded = layout.waves;

        Debug.Log($"Total Kills needed: {totalKillsNeeded}, layout waves {layout.waves}");
    }
}

和ScriptB.cs,将其放在Child游戏对象上,并在需要时在检查器中设置wave

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptB: MonoBehaviour
{
    public int waves = 12;

    public void testFunction()
    {
        Debug.Log("Test Function Called, waves: {waves}");
    }
}

控制台输出:

enter image description here

层次结构应如下所示:

enter image description here

如果您的最后一个孩子有0个波动,则您的for循环将仅显示最后一个:

enter image description here

相关问题