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 } }