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
,说明它们是否被启用。
- 你目前正在游戏对象中搜索
MeshRenderer
这个脚本附加到而不是查看Obj
GameObjects。你必须使用它Obj[i].GetComponentInChildren<MeshRenderer>();
- 你可能没有初始化你的数组 - >你不能只使用
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>
,因此您可以稍后添加和删除值(而数组具有固定的长度)。 - 最后我想你想知道组件
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如何统一的主要内容,如果未能解决你的问题,请参考以下文章