你好!我正在尝试创建一个房间,该房间将从列表中生成一个随机布局,并从该布局中获取一个变量。因为从游戏开始就没有布局,所以我遇到了一些麻烦,并且我已经为这个问题研究了几天。当前,“ 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。返回了相同的结果。我可能没有考虑过这个小问题,但是我仍然无法弄清楚。谢谢!
答案 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}");
}
}
控制台输出:
层次结构应如下所示:
如果您的最后一个孩子有0个波动,则您的for循环将仅显示最后一个: