Unity 6.3
0 онлайн 36 гостей 3 в системе
Вход

Добавить элементы управления в отладчик рендеринга в URP

Вы можете настроить окно Rendering Debugger своими собственными контроллерами и скриптами, чтобы визуализировать свойства освещения, рендеринга или материалов вашего проекта.

Окно Rendering Debugger содержит множество вкладок («панелей»). При выборе панели окно отображает один или несколько элементов управления («виджетов»).

Чтобы создать виджет и добавить его в новую панель, выполните следующие действия:

  1. Создайте скрипт, использующий using UnityEngine.Rendering; для включения пространства имен UnityEngine.Rendering.
  2. Создайте виджет, создав экземпляр дочернего класса DebugUI.Widgetнапример DebugUI.Button.
  3. В виджете реализуйте обратный вызов onValueChanged, который Unity вызывает при изменении значения в виджете.
  4. Создать панель с помощью DebugUI.instance.GetPanel.
  5. Добавить виджет в массив.
  6. Добавить массив виджета в список дочерних элементов на панели.

Если вы добавите 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.

Добавить контейнер

Вы можете использовать контейнеры для отображения групп виджетов вместе.

  1. Создайте контейнер, используя один из дочерних классов DebugUI.Container, например DebugUI.Foldout.
  2. Добавить массив виджетов с помощью метода контейнера 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);
    }
}