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

OnOpenAssetAttribute

класс в UnityEditor.Callbacks

Наследуется от:CallbackOrderAttribute

Описание

Вызывает статический метод обратного вызова, когда Unity Editor пытается открыть ассет.

Unity вызывает любой статический метод, помеченный [OnOpenAssetAttribute] при попытке открыть ресурс, например, при двойном щелчке по ресурсу в Редакторе. Это дает возможность реализовать логику открытия ресурса или проверить, что ресурс может быть открыт в Unity Editor в отличие от внешней программы.

Атрибут нацелен на методы и принимает два необязательных позиционных параметра:

  • callbackOrder: Первый параметр представляет индекс порядка вызова обратного вызова и должен быть типа int. Это полезно, если у вас есть несколько обратных вызовов OnOpenAssetAttribute, и вы хотите, чтобы они вызывались в определенном порядке. Методы вызываются в возрастающем порядке, начиная с 0.
  • attributeMode: Второй параметр — это значение enum из OnOpenAssetAttributeMode, которое указывает, вызван ли украшенный метод в режиме Execute или Validate. Режим Execute предназначен для обратных вызовов, которые реализуют некоторое настраиваемое поведение открытия ассета. Режим Validate предназначен для проверки того, может ли Редактор открыть ассет. Если не указано, режим по умолчанию — OnOpenAssetAttributeMode.Execute.

Метод, украшенный [OnOpenAssetAttribute] и находящийся в режиме Execute, должен иметь одну из следующих подписей:

  • static bool OnOpenAsset(int instanceID)
  • static bool OnOpenAsset(int instanceID, int line)
  • static bool OnOpenAsset(int instanceID, int line, int column)

Примечание: Метод обратного вызова не должен иметь названия OnOpenAsset но его подпись должна соответствовать одной из указанных.

Метод украшен [OnOpenAssetAttribute] и в Validate режим должен иметь следующую подпись:

static bool OnOpenAsset(int instanceID)

В OnOpenAssetAttributeMode.Validate режиме, метод не открывает ассет, но проверяет, может ли Редактор его открыть. Он возвращает true если Редактор может открыть ассет или false Это эквивалентно проверке AssetDatabase.CanOpenAssetInEditor выполняет.

Интеграции с системами управления версиями в основном используют эту функцию проверки для определения того, какие файлы следует извлечь. GameObjects, Сцены, или созданные пользователем ассеты возврата true потому что они открываются и редактируются в редакторе. Такие ассеты, как звуковые клипы и текстуры, возвращаются false потому что они открываются и редактируются во внешней программе.

См. также: OnOpenAssetAttributeMode, AssetDatabase.CanOpenAssetInEditor

// Return true if you handled the opening of the asset or false if an external tool should open it.

using UnityEngine; using UnityEditor; using UnityEditor.Callbacks;

public class MyAssetHandler : ScriptableObject { [OnOpenAssetAttribute(1)] public static bool step1(int instanceID, int line) { string name = EditorUtility.InstanceIDToObject(instanceID).name; Debug.Log("Open Asset step: 1 (" + name + ")"); return false; // we did not handle the open }

// step2 has an attribute with index 2, so will be called after step1 [OnOpenAssetAttribute(2)] public static bool step2(int instanceID, int line) { Debug.Log("Open Asset step: 2 (" + instanceID + ")"); return false; // we did not handle the open }

[OnOpenAsset(OnOpenAssetAttributeMode.Validate)] public static bool WillOpenInUnity(int instanceID) { if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(instanceID)) == typeof(MyAssetHandler)) { // We can open MyAssetHandler asset using MyAssetHandler opening method return true; } else return false; // The passed instance doesn't belong to MyAssetHandler type asset so we won't be able to open it using opening method inside MyAssetHandler } }