Описание
Атрибут класса, который позволяет определить динамическое ограничение для поля MonoBehavior или ScriptableObject для селектора объектов.
Этот атрибут идентифицирует методы как обработчики настраиваемых селекторов объектов. Для работы обработчикам требуются объекты, специфичные для редактора. Если вы хотите ограничить поле скрипта UnityEngine, вы должны определить настраиваемый атрибут, украсить им поле и использовать этот атрибут в коде редактора при объявлении настраиваемого обработчика.
Вот пример того, как настроить ваш компонент:// UnityEngine only script.
using System;
using UnityEngine;
using UnityEngine.SearchService;
using Object = UnityEngine.Object;
// Declare a custom attribute that you use to decorate your fields and declare your handlers.
public class ObjectSelectorRedMaterialAttribute : Attribute {}
// This example demonstrates how to add a constraint on a field so
// that an object selector only displays objects that satisfy the constraint.
public class MyComponent : MonoBehaviour
{
// Declare a field with an object selector constraint on it.
// This material only accepts materials that satisfy the conditions implemented by the handler written for ObjectSelectorRedMaterialAttribute.
[ObjectSelectorRedMaterialAttribute]
public Material redMat;
// Start is called before the first frame update.
void Start()
{
}
// Update is called once per frame.
void Update()
{
}
}
В этом примере показано, как реализовать сценарий редактора для обработчиков:
using System;
using System.Linq;
using UnityEditor;
using UnityEditor.SearchService;
using UnityEngine;
using Object = UnityEngine.Object;
public class ExternalHandlers
{
// Declare the object selector constraint handler.
// This function act as the constraint for red materials.
// It only returns true for materials that are red.
[ObjectSelectorHandler(typeof(ObjectSelectorRedMaterialAttribute))]
static bool HandleRedMaterial(ObjectSelectorTargetInfo targetInfo, Object[] editedObjects, ObjectSelectorSearchContext context)
{
var target = targetInfo.LoadObject();
var mat = target as Material;
if (mat == null)
return false;
return mat.color == Color.red;
}
}
Для обработчика селектора объектов требуется следующая подпись:
static bool Handler(ObjectSelectorTargetInfo targetInfo, Object[] editedObjects, SearchService.ObjectSelectorSearchContext context);
Первый параметр — это информация о цели. Он содержит глобальный идентификатор целевого объекта. Если целевой объект уже загружен, первый параметр может также содержать его тип и экземпляр. Второй параметр — это массив выделенных в данный момент объектов, которые редактируются в Инспекторе. Последний параметр — это SearchService.ObjectSelectorHandlerContext, передаваемый функции ISelectorEngine.SelectObject.
Свойства
attributeType | Тип атрибута. |
Конструкторы
ObjectSelectorHandlerAttribute | Конструктор, используемый для объявления ObjectSelectorHandlerAttribute в методе. |