GetComponentInChildren如何统一

问题描述 投票:-1回答:2

我有个问题:

如何将[]状态分配给rend[]

public GameObject[] Obj;
private bool[] Status;
private MeshRenderer[] rend;

private void Start () 
{
    for (int i = 0; i < Obj.Length; i++)
    {
        rend[i] = GetComponentInChildren<MeshRenderer>();
        Status[i] = rend[i];
    }
}
c# unity3d boolean unityscript assign
2个回答
0
投票

根据Object.bool你可以尝试这种方式:

public GameObject[] Obj ;
private bool[] Status;
private MeshRenderer[] rend;

void Start () {
    for (int i = 0; i < Obj.Length; i++)
    {
        rend[i] = Obj[i].GetComponentInChildren<MeshRenderer>();
        Status[i] = rend[i] != null;
    }
}

0
投票

你的问题很不清楚所以我可以猜到你想要的是什么:

我想说你想在MeshRenderer的GameObjects下找到第一个Obj并得到一个数组Status,说明它们是否被启用。

  1. 你目前正在游戏对象中搜索MeshRenderer这个脚本附加到而不是查看Obj GameObjects。你必须使用它 Obj[i].GetComponentInChildren<MeshRenderer>();
  2. 你可能没有初始化你的数组 - >你不能只使用Status[i] =rend[i] =分配值,如果数组从未使用new初始化。一旦你有Obj的大小,你可以在开始时这样做 public GameObject[] Obj; private bool[] Status; private MeshRenderer[] rend; private void start() { Status = new bool[Obj.Length]; rend = new MeshRenderer[Obj.Length]; // ... } 但我更喜欢使用List<bool>List<MeshRenderer>,因此您可以稍后添加和删除值(而数组具有固定的长度)。
  3. 最后我想你想知道组件MeshRenderer是否已启用所以你可以分配rend[i].enabled

全部一起 就像是

public GameObject[] Obj ;
// Using List here you can already initialize it here 
// which would be possible using an array
private List<bool> Status = new List<bool>();
private List<MeshRenderer> rend = new List<MeshRenderer>();

private void Start(){
    for (int i = 0; i < Obj.Length; i++)
    {
        rend.Add(Obj[i].GetComponentInChildren<MeshRenderer>());
        bool existsAndEnabled = rend[i] != null && rend[i].enabled;
        Status.Add(existsAndEnabled); 
    }
}

请注意,对于Obj中的一个游戏对象仍然没有找到MeshRenderer所以我说如果没有Status也将是false

© www.soinside.com 2019 - 2024. All rights reserved.