Unity 6.3
0 онлайн 2 гостей 3 в системе
Вход

ScriptableObject.OnEnable()

Описание

Эта функция вызывается при загрузке объекта.

OnEnable вызывается каждый раз, когда экземпляр ScriptableObject загружается в память. Это происходит в следующих сценариях:

  • При запуске Редактора, для всех ScriptableObjects, на которые делается ссылка в открытых сценах.
  • При создании нового ScriptableObject, созданного в качестве ассета с помощью меню Создать актив в Редакторе.
  • При экземплярировании ScriptableObject, экземплярированного во время выполнения через ScriptableObject.CreateInstance или при загрузке ассета во время выполнения.
  • На домене перезагрузить, для всех ScriptableObjects загруженных в памяти.
  • При первой загрузке сцены, которая содержит ссылку на ScriptableObject в окне Hierarchy, или при последующих загрузках, если первоначальный экземпляр с тех пор был удален.
  • При первом выборе ScriptableObject в окне Project, или при последующих выборах, если первоначальный экземпляр с тех пор был удален.

В большинстве случаев, OnEnable вызывается только один раз для конкретного экземпляра ScriptableObject ассета в памяти и может быть использован для инициализации. OnEnable вызывают несколько раз, это вероятно, что ScriptableObject Это может произойти по различным причинам.

Например, если вы снимете флажок ScriptableObject в 2000 году Project если вы открываете окно или открываете новую сцену, которая не ссылается на объект, объект выходит из сферы действия и может быть собран как мусор. В качестве альтернативы, события, которые вызывают перезагрузку домена, такие как перекомпиляция скриптов или реимпорт ассетов, также могут вызвать ScriptableObjects вновь учредить и OnEnable чтобы снова вызвать.

В редакторе, Unity также иногда создает временные примеры ScriptableObjects Каждый временный экземпляр получает свой собственный ключ для проверки или редактирования. OnEnable вызвать, но ScriptableObject.OnDisable может не быть вызван, если объект мусор собран или уничтожен без надлежащей очистки.

OnEnable не может быть короутин.

// Right-click in the Project window > Create > Example > CounterData.
// Every time you recompile scripts or reload the asset, OnEnable is called, and the counter resets.

using UnityEngine;

[CreateAssetMenu(menuName = "Example/CounterData")] public class CounterData : ScriptableObject { public int counter;

// Called when the ScriptableObject is loaded or reloaded void OnEnable() { Debug.Log("CounterData enabled! Resetting counter."); counter = 0; // Reset counter whenever enabled } }