Ваш вопрос очень неясен, поэтому я могу только догадываться, что вы пытаетесь архивировать:
Я бы сказал, что вы хотите найти первые MeshRenderer
под вашими объектами GameObject в Obj
и получить массив Status
, указывающий, включены они или нет.
В настоящее время вы всегда ищете MeshRenderer
в GameObject, к которому прикреплен этот скрипт, а не в 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);
}
}
Обратите внимание, что все еще возможно, что для одного из GameObjects в Obj
не найден MeshRenderer
, поэтому я говорю, что Status
также будет false
, если его не было.