GetComponentInChildren如何统一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GetComponentInChildren如何统一相关的知识,希望对你有一定的参考价值。

我有个问题:

如何将[]状态分配给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];
    }
}
答案

根据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;
    }
}
另一答案

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

我想说你想在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

以上是关于GetComponentInChildren如何统一的主要内容,如果未能解决你的问题,请参考以下文章

三层系统如何在Java中运行?

如何实时统一地为曲线的各个部分着色?

分布式架构如何优化了易云系统?

unity3D 如何获取 3D Text 的对象,并改变其值

VS2015如何批量统改相同变量名

树莓派之--Windowns下安装树莓派系统到SD卡