как GetComponentInChildren в единстве - PullRequest
0 голосов
/ 02 сентября 2018

У меня проблема:

Как присвоить [] статус 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];
    }
}

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Ваш вопрос очень неясен, поэтому я могу только догадываться, что вы пытаетесь архивировать:

Я бы сказал, что вы хотите найти первые MeshRenderer под вашими объектами GameObject в Obj и получить массив Status, указывающий, включены они или нет.

  1. В настоящее время вы всегда ищете MeshRenderer в GameObject, к которому прикреплен этот скрипт, а не в 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); 
    }
}

Обратите внимание, что все еще возможно, что для одного из GameObjects в Obj не найден MeshRenderer, поэтому я говорю, что Status также будет false, если его не было.

0 голосов
/ 02 сентября 2018

В соответствии с 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;
    }
}
...