Как я могу добавить переменную уровня int, чтобы решить, с какого уровня начать получать объекты? А какие коллайдеры мне добавить к ним? - PullRequest
0 голосов
/ 19 октября 2019
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;

public class GetComponents : MonoBehaviour
{
    public Transform parent;
    public List<GameObject> allObjects = new List<GameObject>();

    private void Start()
    {
        string path = "e:/colliders.txt";
        StreamWriter writer = new StreamWriter(path, true);

        allObjects = FindObjectsOfType<GameObject>().ToList();

        Transform[] allChildren = parent.GetComponentsInChildren<Transform>();

        foreach (Transform child in allChildren)
        {
            var colliders = child.GetComponents<Collider>();

            int length = colliders.Length;

            if (length == 0)
            {
                writer.WriteLine(string.Format("{0} - No Colliders", child.name));
            }
            else
            {
                //composes a list of the colliders types, this will print what you want e.g. "Wall1 - BoxCollider, MeshCollider"

                string colliderTypes = string.Empty;

                for (int i = 0; i < length; i++)
                {
                    colliderTypes = string.Format("{0}{1}", colliderTypes, colliders[i].GetType().Name);

                    if (i != (length - 1))
                    {
                        colliderTypes = string.Format("{0}, ", colliderTypes);
                    }
                }
                //writer.WriteLine(string.Format("{0} - {1}", child.name, colliderTypes));
            }
        }

        writer.Close();
    }
}

В этом случае я получаю только объекты без коллайдеров. И тогда я хочу добавить к каждому объекту коллайдер. Но так как объектов так много, я хочу добавить к каждому из них коллайдер, который не позволит персонажу перемещаться по ним. Я не уверен, просто ли добавить к ним коллайдер сетки или какой-нибудь другой коллайдер / ы?

И как мне установить уровень, чтобы начать получать объекты?

Например, яимеют такую ​​структуру:

Parent
 Child 1
 Child 2
 Child 3
 Child 4

Теперь уровень 0 является родительским, уровень 1 - дочерним от 1 до 4. Но у каждого дочернего элемента 1,2,3,4 есть много дочерних элементов на многих уровнях (деревьях). .

Я хочу, чтобы пример для получения дочерних форм преобразования уровня 1, чтобы он не включал родительский объект и дочерние элементы 1,2,3,4 в качестве объектов без коллайдеров.

1 Ответ

0 голосов
/ 19 октября 2019

Это можно сделать двумя способами. 1.Проверьте, если родитель того ребенка, который вам нужен.

foreach (Transform child in allChildren){ 
  if(child.parent == parent){
   //Add colliders}

2.Не используйте GetComponentsInChildern

foreach(Transform t in parent){
   // add Colliders
}

Справка:
https://answers.unity.com/questions/495079/how-to-get-first-depth-child-components-of-a-paren.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...