Не удается найти коллекцию объектов при попытке получить коллекцию с помощью FindObjectByType - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь найти все объекты по типу Tiledata.

  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;
  using UnityEngine.Tilemaps;
  using UnityEngine.UI;
  using System.Linq; 

  ....

  Tiledata Test1 = new Tiledata(3, 1);
  Debug.Log(Test1.growTime);
  foreach(Tiledata Tile in FindObjectsOfType<MonoBehaviour>().OfType<Tiledata>()) {
      Debug.Log("Test");
  } 

Класс:

public class Tiledata
 {
     public int growTime;
     public int growLevel;

     public Tiledata(int growTime1, int growLevel1) {
        growTime = growTime1;
        growLevel = growLevel1;
     }

 } 

В моем коде НЕТ ошибок.

Если я отлаживаю Test1.growTime, я, конечно же, получаю 3. так что на Test1 можно ссылаться.

Но моя проблема в том, что у меня много Tiledata, и я хотел бы повторить их. В моем foreach я пытаюсь повторить их, но ничего не получается.

В цикле foreach не выполняется никакого кода, поэтому кажется, что нет объекта типа Tiledata, хотя я могу ссылаться на него, и он создается прямо над циклом foreach?

1 Ответ

3 голосов
/ 10 июля 2019

FindObjectsOfType<MonoBehaviour>() находит MonoBehaviour или, что лучше, Unity.Object в сцене. Больше информации в руководстве .

Он не вернет никаких активов (сетки, текстуры, префабы, ...) или неактивных объекты. Не будет возвращать объекты с установленным HideFlags.DontSave. использование Resources.FindObjectsOfTypeAll, чтобы избежать этих ограничений.

Tiledata не является производным от MonoBehaviour, поэтому не будет найдено.

Чтобы найти его (с помощью FindObjectsOfType), вам нужно извлечь его из MonoBehaviour.

public class Tiledata : MonoBehaviour
 {
     public int growTime;
     public int growLevel;

     public Tiledata(int growTime1, int growLevel1) {
        growTime = growTime1;
        growLevel = growLevel1;
     }

 }

И добавить его в игру как Component (для этого также необходимо присоединить GameObject).

Tiledata Test1 = new GameObject().AddComponent<Tiledata>();
  Debug.Log(Test1.growTime);
  foreach(Tiledata Tile in FindObjectsOfType<Tiledata>()) {
      Debug.Log("Test");
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...