Почему мой ресурс не загружается при вызове Resources.FindObjectsOfTypeAll () - PullRequest
0 голосов
/ 03 февраля 2019

В моей игре есть метод, который динамически находит и создает префабы в моей сцене, как это

public void CreateAgent(string agentName)
{
   var prefabs = Resources.FindObjectsOfTypeAll<Agent>();
   var selectedPrefab = prefabs.Where(p => p.name == agentName).FirstOrDefault();
   Instantiate(selectedPrefab.gameObject);
}

Иногда это работает, но иногда кажется, что ресурс для моего префаба не был загружен,поэтому Resources.FindObjectsOfTypeAll() не возвращает ресурс, который я хочу загрузить.Я могу решить эту проблему, сначала позвонив по номеру Resources.LoadAll<Agent>("MyPrefabDirectory"), но я не уверен, что выполнение этого во время игры вызовет проблемы или замедлит игру.Также кажется, что Unity выгружает ранее использованные ресурсы, потому что я могу загрузить префаб A в мою сцену, затем загрузить новую сцену, и когда я пытаюсь загрузить префаб A в новую сцену, это приводит к тому, что префаб A не будет найден Resources.FindObjectsOfTypeAll()

Итак, мои вопросы

  1. Почему я должен позвонить Resources.LoadAll(), прежде чем Resources.FindObjectsOfType() найдет мой сборник?
  2. Почему Unity выгружаетранее загруженный ресурс, когда я меняю сцены?
  3. Неужели звонить Resources.LoadAll<MyResourceType>() во время игры плохо?

1 Ответ

0 голосов
/ 03 февраля 2019

Из документации

Resources.FindObjectsOfType():

Эта функция может возвращать любой тип объекта Unity , который загружен.

Почему Unity выгружает ранее загруженные ресурсы?Для экономии памяти.Если он не используется, он будет собирать мусор.

Учитывая, что вы собираетесь использовать только один из возвращенных объектов, вам, вероятно, следует выполнить рефакторинг, чтобы просто вызвать Load для одного объекта, который вы используете.на самом деле нужно.

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