Добавить элементы управления в отладчик рендеринга в URP
Вы можете настроить окно Rendering Debugger своими собственными контроллерами и скриптами, чтобы визуализировать свойства освещения, рендеринга или материалов вашего проекта.
Окно Rendering Debugger содержит множество вкладок («панелей»). При выборе панели окно отображает один или несколько элементов управления («виджетов»).
Чтобы создать виджет и добавить его в новую панель, выполните следующие действия:
- Создайте скрипт, использующий
using UnityEngine.Rendering;для включения пространства именUnityEngine.Rendering. - Создайте виджет, создав экземпляр дочернего класса DebugUI.Widgetнапример
DebugUI.Button. - В виджете реализуйте обратный вызов
onValueChanged, который Unity вызывает при изменении значения в виджете. - Создать панель с помощью DebugUI.instance.GetPanel.
- Добавить виджет в массив.
- Добавить массив виджета в список дочерних элементов на панели.
Если вы добавите 2 или более виджетов в массив, панель отображает виджеты в том же порядке, что и массив.
Следующий пример кода создает и добавляет виджет, который включает или отключает главный направленный свет:
using UnityEngine;
using UnityEngine.Rendering;
using System.Collections.Generic;
using System.Linq;
[ExecuteInEditMode]
public class CustomDebugPanel : MonoBehaviour
{
static bool lightEnabled = true;
void OnEnable()
{
// Create a list of widgets
var widgetList = new List<DebugUI.Widget>();
// Add a checkbox widget to the list of widgets
widgetList.AddRange(new DebugUI.Widget[]
{
new DebugUI.BoolField
{
displayName = "Enable main directional light",
tooltip = "Enable or disable the main directional light",
getter = () => lightEnabled,
// When the widget value is changed, change the value of lightEnabled
setter = value => lightEnabled = value,
// Run a custom function to enable or disable the main directional light based on the widget value
onValueChanged = DisplaySunChanged
},
});
// Create a new panel (tab) in the Rendering Debugger
var panel = DebugManager.instance.GetPanel("My Custom Panel", createIfNull: true);
// Add the widgets to the panel
panel.children.Add(widgetList.ToArray());
}
// Remove the custom panel if the GameObject is disabled
void OnDisable()
{
DebugManager.instance.RemovePanel("My Custom Panel");
}
// Enable or disable the main directional light based on the widget value
void DisplaySunChanged(DebugUI.Field<bool> field, bool displaySun)
{
Light sun = FindObjectsOfType<Light>().Where(x => x.type == LightType.Directional).FirstOrDefault();
if (sun)
sun.enabled = displaySun;
}
}
Добавить скрипт в GameObject. Вы должны заметить новую панель Моя пользовательская панель в окне Отладчик рендеринга.
Добавление элемента управления к существующей панели
Чтобы получить существующую панель, используйте DebugManager.instance.GetPanel с именем панели. Установите createIfNull на false, чтобы не создавать случайно новую панель, если её имя не совпадает с именем существующей панели.
Следующий пример кода извлекает панель из приведенного выше примера кода:
var panel = DebugManager.instance.GetPanel("My Custom Panel", createIfNull: false);
Вы не должны добавлять виджеты в URP встроенные панели Rendering Debugger.
Добавить контейнер
Вы можете использовать контейнеры для отображения групп виджетов вместе.
- Создайте контейнер, используя один из дочерних классов DebugUI.Container, например
DebugUI.Foldout. - Добавить массив виджетов с помощью метода контейнера
Add.
В следующем примере кода создается сжимаемый контейнер, содержащий 2 флажка:
using UnityEngine;
using UnityEngine.Rendering;
using System.Collections.Generic;
[ExecuteInEditMode]
public class CustomDebugPanelWithContainer : MonoBehaviour
{
void OnEnable()
{
// Create a list of widgets
var widgetList = new List<DebugUI.Widget>();
// Add 2 checkbox widgets to the list of widgets
widgetList.AddRange(new DebugUI.Widget[]
{
new DebugUI.BoolField
{
displayName = "Visualisation 1",
},
new DebugUI.BoolField
{
displayName = "Visualisation 2",
},
});
// Create a container
var container = new DebugUI.Foldout
{
displayName = "My Container"
};
// Add the widgets to the container
container.children.Add(widgetList.ToArray());
// Create a new panel (tab) in the Rendering Debugger
var panel = DebugManager.instance.GetPanel("My Custom Panel With Container", createIfNull: true);
// Add the container to the panel
panel.children.Add(container);
}
}