Unity ScriptableObjects и DontDestroyOnLoad - PullRequest
       0

Unity ScriptableObjects и DontDestroyOnLoad

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

У меня есть пара небольших вопросов о ScriptableObjects.

1) При выполнении вспомогательных тестов выясняется, что ресурс scripttableobject никогда не загружается в память (т.е. десериализуется), если не существует объекта, который уже ссылается на него. Есть ли способ заставить эти скриптовые объекты загружаться в начале игры без каких-либо жестких ссылок на них?

2) Я пытаюсь использовать hideflags.DontDestroyOnLoad, чтобы поддерживать объекты сценариев живыми на протяжении всей игры. Я прочитал в документации, что вам нужно немедленно уничтожить эти объекты, чтобы предотвратить утечки памяти. Мне нужно добавить это в OnDisable или что-то подобное, чтобы убить себя, когда закончите? Я намерен снова использовать те же объекты сценариев, когда игра будет открыта снова, я просто не был уверен, нужно ли было убивать объекты каждый раз, когда игра закрывается.

Спасибо, я пытаюсь понять, как именно работают объекты сценариев, и некоторые рекомендации по их использованию.

1 Ответ

0 голосов
/ 11 сентября 2018
  1. Как отметил @Hellium в комментариях, если ничто не ссылается на них, то ничто не может их использовать.Если ваш менеджер / утилита содержит ссылки на все из них, вам просто нужно загрузить его.Обычный способ сделать это - просто использовать Resources.Load с жестко заданным путем к prefab / ScriptableObject утилиты.
  2. Unity уничтожает все объекты сцены при загрузке сцены.DontDestroyOnLoad предотвращает уничтожение определенного объекта.ScriptableObjects не являются объектами сцены, поэтому на них не влияет ни одна из этих вещей.

Я прочитал в документации, что вам нужно немедленно уничтожить эти объекты, чтобы предотвратить утечки памяти.Нужно ли добавлять это в OnDisable или что-то подобное, чтобы убить себя, когда закончите?

Нет, и Unity действительно будет жаловаться, если вы попытаетесь это сделать.ScriptableObject.OnDisable вызывается только когда он уничтожается движком.Это не то же самое, что MonoBehaviour, где вы можете включать и отключать его по своему усмотрению.

Я намерен снова использовать те же объекты сценариев, когда игра открывается, я просто не был уверен, было ли это совершенно необходимоубивайте объекты каждый раз, когда игра закрывается.

Когда вы снова загрузите игру, утилита / менеджер загрузит те же ссылки, что и в первый раз.

Я не уверениз того, как вы это сформулировали, но некоторые люди видят, как это работает в редакторе (Unity отменяет все изменения объектов сцены, когда вы выходите из режима воспроизведения, но ScriptableObjects обычно являются активами, которые не затрагиваются, поэтому их данные сохраняются), и они ошибочнодумаю, что он работает так же, как в сборке.Это не.При сборке все значения ваших префабов / ScriptableObjects / других ресурсов фиксируются. Каждый раз, когда вы запускаете эту сборку, вы начинаете с тех же значений, что и при сборке, независимо от изменений, которые вы внесли в прошлый раз, когда вы запускали игру.,Вы не можете просто использовать ScriptableObjects как простой способ сохранить материал во время выполнения (хотя было бы здорово, если бы вы могли).

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