HandleUtility.RegisterRenderPickingCallback
Declaration
public static bool RegisterRenderPickingCallback(HandleUtility.RenderPickingCallback renderPickingCallback);Параметры
| Параметр | Описание |
|---|---|
| renderPickingCallback | Делегат отказывается регистрироваться для обратного вызова. |
Возвращаемое значение
логическое True, если регистрация была успешной. False, если обратный вызов уже зарегистрирован.
Описание
Зарегистрирует обратный вызов, который будет вызван, когда Unity будет отображаться для подбора.
Используйте этот обратный вызов для рендеринга настраиваемых геометрий над существующими объектами сцены в текстуре рендеринга подбора, так что GameObjects, представленный настраиваемыми геометриями, может быть выбран.
Каждое представление должно написать Vector4-typed selectionId текстуре. selectionId кодируется из pickingIndex переданный в обратный вызов через RenderPickingArgs структуру с помощью функции HandleUtility.EncodeSelectionId. Вы можете отобразить несколько SelectionIds в одном обратном вызова, если они закодированы последовательно от увеличения pickingIndex, и возвращает общее число отображенных индексов выбора при возвращении из обратного вызова.
Большинство шейдеров Unity имеют пропуск "ScenePickingPass", который может быть использован для рендеринга. Использование Material.FindPass с именем прохода "ScenePickingPass", чтобы найти индекс прохода шейдера из Material, и используйте этот индекс пропуска при вызове APIs, например Material.SetPass. Обратите внимание, что вы можете использовать только рендер-функции, которые считаются действующими немедленно, такие как Graphics.DrawMeshNow и Graphics.DrawProceduralNow (вместо их непосредственных аналогов) Graphics.DrawMesh и Graphics.DrawProcedural). Альтернативой является запись вашего рендеринга на CommandBuffer объект и вызов Graphics.ExecuteCommandBuffer после записи.
Текстура рендеринга подбора уже была связана как активная текстура рендеринга, когда она вошла в обратный вызов. Вы можете изменить активную текстуру рендеринга во время обратного вызова, но должна восстановить активную текстуру рендеринга перед выходом из обратного вызова.
Ваше отображение должно учитывать набор ignore и filter GameObject, переданный обратному вызовам через RenderPickingArgs аргумент-структуру, чтобы определить, что именно следует отрисовать в текущем контексте. См. RenderPickingArgs для больше информации.
После отображения возвращается RenderPickingResult структуру с числом использованных вами индексов выбора и ещё одну функцию обратного вызова, которая по индексу выбора вернёт ссылку на GameObject, подлежащий выделению, когда пользователь щёлкнет по отрисованному пикселю под курсором. Если отрисовывать нечего, можно вернуть структуру с renderedPickingIndexCount 0 или просто RenderPickingResult.NoOperationСм. RenderPickingResult для больше информации.
Метод бросает InvalidOperationException если вы попытаетесь вызвать его внутри рендеринга, выбирая обратные вызова.
Дополнительные ресурсы: UnregisterRenderPickingCallback.