reckfellENGINE

VisualShaderNodeCustom

C#-ресурс для собственного блока графа Visual Shader.

На этой странице
class VisualShaderNodeCustomReckfellSharpНаследует VisualShaderNode

Объявляет порты и генерирует шейдерные инструкции через переопределения _GetInputPort*(), _GetOutputPort*() и _GetCode(). Для автоматического обнаружения в редакторе используйте [Tool, GlobalClass]. EditorPlugin и plugin.cfg для одного блока не нужны. Узел графа не является игровой Entity.

Строки _GetCode() написаны на шейдерном языке, а не на C#. Используйте переданные inputVars/outputVars и уникальные имена общих функций. Для живого C#-блока не вызывайте Dispose() после передачи графу: это отсоединяет его скриптовое поведение.

Рабочий пример, сохранение и ограничения проверки.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

VisualShaderNodeCustomКонструктор
# VisualShaderNodeCustom
C#
public VisualShaderNodeCustom();

Свойства2

InitializedСвойство
# Initialized
C#
public bool Initialized { get; set; }

Внутренний флаг инициализации элемента редактора. Не используйте его как признак GPU-компиляции или готовности материала. При true обычные методы изменения начальных входов пользовательского блока ограничены.

PropertiesСвойство
# Properties
C#
public string Properties { get; set; }

Внутреннее сериализованное представление выбора выпадающих настроек. Для объявления вариантов используйте _GetProperty*(), а для чтения выбора — GetOptionIndex(); не собирайте строку вручную.

Методы22

GetOptionIndexint
# GetOptionIndex
C#
public int GetOptionIndex(int option);

Читает сохранённый выбор выпадающей настройки для генерации кода. Если для настройки нет сохранённого значения, native-реализация возвращает 0.

Параметры
ИмяТипПо умолчанию
optionint—
option

Индекс выпадающей настройки, не номер входного порта.

Возвращает int

Индекс выбранного варианта.

_GetCategorystring
# _GetCategory
C#
public virtual string _GetCategory();

Задаёт путь категории пользовательского блока, например Reckfell/Color. Редактор добавляет префикс Addons; разделитель / создаёт вложенность. Не применяйте ограничения имени блока к всему пути.

Возвращает string

Путь категории без обязательного префикса Addons.

_GetCodestring
# _GetCode
C#
public virtual string _GetCode(Reckfell.Collections.Array<string> inputVars, Reckfell.Collections.Array<string> outputVars, Shader.Mode mode, VisualShader.Type type);

Возвращает инструкции на шейдерном языке Reckfell для одного экземпляра блока. Используйте выражения inputVars и присваивайте результаты outputVars; подписи портов не заменяют эти строки. Не объявляйте общую функцию повторно в каждом экземпляре.

Параметры
ИмяТипПо умолчанию
inputVarsReckfell.Collections.Array<string>—
outputVarsReckfell.Collections.Array<string>—
modeShader.Mode—
typeVisualShader.Type—
inputVars

Готовые выражения или имена переменных входов в порядке индексов.

outputVars

Имена переменных выходов, которым нужно присвоить результаты.

mode

Режим шейдера: например CanvasItem или Spatial.

type

Этап графа, например Fragment.

Возвращает string

Текст тела вычисления, например result = mix(a, b, weight); с фактическими именами из аргументов.

_GetDefaultInputPortint
# _GetDefaultInputPort
C#
public virtual int _GetDefaultInputPort(VisualShaderNode.PortType type);

Выбирает вход при создании блока протягиванием связи в пустую область графа. Возвращайте подходящий индекс для переданного типа. В native-реализации 1.0.0 без переопределения возвращается 0.

Параметры
ИмяТипПо умолчанию
typeVisualShaderNode.PortType—
type

Тип протягиваемой связи.

Возвращает int

Индекс входного порта.

_GetDescriptionstring
# _GetDescription
C#
public virtual string _GetDescription();

Задаёт пояснение блока в окне добавления. Кратко укажите вычисление, диапазоны и ограничения режима.

Возвращает string

Текст описания.

_GetFuncCodestring
# _GetFuncCode
C#
public virtual string _GetFuncCode(Shader.Mode mode, VisualShader.Type type);

Добавляет общий код в начало функций шейдера для данного типа блока. Порядок вставки кода разных пользовательских типов не определён; не стройте между ними зависимость от порядка.

Параметры
ИмяТипПо умолчанию
modeShader.Mode—
typeVisualShader.Type—
mode

Режим шейдера.

type

Этап, для функции которого генерируется код.

Возвращает string

Инструкции для начала функции или пустая строка.

_GetGlobalCodestring
# _GetGlobalCode
C#
public virtual string _GetGlobalCode(Shader.Mode mode);

Добавляет общие объявления вне функций шейдера. Для одного использованного C#-скрипта генератор добавляет их один раз, даже при нескольких экземплярах. Используйте уникальные имена и не храните здесь состояние отдельного экземпляра.

Параметры
ИмяТипПо умолчанию
modeShader.Mode—
mode

Режим генерируемого шейдера.

Возвращает string

Глобальные объявления на шейдерном языке или пустая строка.

_GetInputPortCountint
# _GetInputPortCount
C#
public virtual int _GetInputPortCount();

Задаёт число входных портов блока. Методы имени, типа и значения получают индексы от 0 до этого количества минус один.

Возвращает int

Количество входов; без переопределения входов нет.

_GetInputPortDefaultValueVariant
# _GetInputPortDefaultValue
C#
public virtual Variant _GetInputPortDefaultValue(int port);

Возвращает начальное значение неподключённого входа. Редактор применяет callback при добавлении блока через UI. В 1.0.0 программный VisualShader.AddNode() сам эти значения не записывает: явно вызовите SetInputPortDefaultValue() после добавления.

Параметры
ИмяТипПо умолчанию
portint—
port

Индекс порта с нуля.

Возвращает Variant

Variant с типом, соответствующим порту; Nil означает отсутствие заданного значения.

_GetInputPortNamestring
# _GetInputPortName
C#
public virtual string _GetInputPortName(int port);

Задаёт подпись входного порта. Это не готовое имя переменной GPU: в _GetCode() используйте переданное выражение inputVars[port].

Параметры
ИмяТипПо умолчанию
portint—
port

Индекс порта с нуля.

Возвращает string

Подпись входа.

_GetInputPortTypeVisualShaderNode.PortType
# _GetInputPortType
C#
public virtual VisualShaderNode.PortType _GetInputPortType(int port);

Задаёт тип данных входа. Согласуйте его со значением по умолчанию и выражениями шейдерного кода; Vector3D соответствует vec3, Scalar — float.

Параметры
ИмяТипПо умолчанию
portint—
port

Индекс порта с нуля.

Возвращает VisualShaderNode.PortType

Тип указанного входа.

_GetNamestring
# _GetName
C#
public virtual string _GetName();

Задаёт имя блока в списке добавления и графе. Для регистрации в редакторе используйте допустимый ASCII-идентификатор без пробелов, например BlendTint.

Возвращает string

Имя блока.

_GetOutputPortCountint
# _GetOutputPortCount
C#
public virtual int _GetOutputPortCount();

Задаёт число выходных портов блока. Каждому вычисляемому выходу присвойте значение в _GetCode().

Возвращает int

Количество выходов; без переопределения выходов нет.

_GetOutputPortNamestring
# _GetOutputPortName
C#
public virtual string _GetOutputPortName(int port);

Задаёт подпись выходного порта. В _GetCode() присваивайте результат outputVars[port], а не строке подписи.

Параметры
ИмяТипПо умолчанию
portint—
port

Индекс порта с нуля.

Возвращает string

Подпись выхода.

_GetOutputPortTypeVisualShaderNode.PortType
# _GetOutputPortType
C#
public virtual VisualShaderNode.PortType _GetOutputPortType(int port);

Задаёт тип данных выхода; генерируемое присваивание должно выдавать совместимое значение.

Параметры
ИмяТипПо умолчанию
portint—
port

Индекс порта с нуля.

Возвращает VisualShaderNode.PortType

Тип указанного выхода.

_GetPropertyCountint
# _GetPropertyCount
C#
public virtual int _GetPropertyCount();

Задаёт число выпадающих настроек пользовательского блока; это не число входных портов. Для каждой задайте имя, список вариантов и при необходимости начальный индекс.

Возвращает int

Количество выпадающих настроек.

_GetPropertyDefaultIndexint
# _GetPropertyDefaultIndex
C#
public virtual int _GetPropertyDefaultIndex(int index);

Задаёт начальный индекс выбранного варианта выпадающей настройки. Он должен соответствовать массиву _GetPropertyOptions().

Параметры
ИмяТипПо умолчанию
indexint—
index

Индекс выпадающей настройки с нуля.

Возвращает int

Индекс выбранного варианта с нуля.

_GetPropertyNamestring
# _GetPropertyName
C#
public virtual string _GetPropertyName(int index);

Задаёт подпись выпадающей настройки блока.

Параметры
ИмяТипПо умолчанию
indexint—
index

Индекс выпадающей настройки с нуля.

Возвращает string

Подпись настройки.

_GetPropertyOptionsstring[]
# _GetPropertyOptions
C#
public virtual string[] _GetPropertyOptions(int index);

Задаёт упорядоченный список вариантов выпадающей настройки. Выбранный индекс читается через GetOptionIndex().

Параметры
ИмяТипПо умолчанию
indexint—
index

Индекс выпадающей настройки с нуля.

Возвращает string[]

Массив подписей вариантов.

_GetReturnIconTypeVisualShaderNode.PortType
# _GetReturnIconType
C#
public virtual VisualShaderNode.PortType _GetReturnIconType();

Выбирает значок типа результата в списке добавления. Это метаданные UI; настоящие типы выходов задаются _GetOutputPortType().

Возвращает VisualShaderNode.PortType

Тип порта для значка.

_IsAvailablebool
# _IsAvailable
C#
public virtual bool _IsAvailable(Shader.Mode mode, VisualShader.Type type);

Фильтрует доступность блока по режиму и этапу графа; по умолчанию true. Не переводит шейдерный код в другой режим и не доказывает его GPU-совместимость.

Параметры
ИмяТипПо умолчанию
modeShader.Mode—
typeVisualShader.Type—
mode

Проверяемый режим шейдера.

type

Проверяемый этап графа.

Возвращает bool

true для допустимого контекста, false для исключения.

_IsHighendbool
# _IsHighend
C#
public virtual bool _IsHighend();

Помечает блок как требующий возможностей Forward+ или Mobile в списке добавления. По умолчанию false. Это подсказка редактора, а не переключение рендерера и не замена проверки GPU-кода.

Возвращает bool

true для отметки high-end, иначе false.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.