PanelSettings.SetPanelChangeReceiver
Declaration
public void SetPanelChangeReceiver(UIElements.IDebugPanelChangeReceiver value);Описание
Устанавливает пользовательский IPanelChangeReceiver в настройке panelChangeReceiver для получения каждого события изменения. Этот метод доступен только в сборках для разработчиков и редакторе, так как это отладочный метод для профилирования приложения.
Обратите внимание, что возвращаемые значения могут меняться со временем, когда изменяется базовая архитектура.
Поскольку это вызывает при каждом изменении, отмеченном на любом визуальном элементе панели, накладные расходы не являются незначительными. Обратный вызов не будет вызван в сборках выпуска, так как метод отбрасывается.
В следующем примере используется panelChangeReceiver в игре. Чтобы проверить это, добавьте компонент к GameObject и ассету Panel Setting, связанному в полях компонента.
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; public class ChangeLogger : MonoBehaviour, IDebugPanelChangeReceiver { public PanelSettings panelSettings; public bool logChanges = true; public bool printOnConsole = false; public bool includeStacktrace = true; public List<ChangeEntry> changes; private void OnEnable() { panelSettings.SetPanelChangeReceiver(this); } public void Initialize() { changes.Clear(); } public void OnVisualElementChange(VisualElement element, VersionChangeType changeType) { if (logChanges) { if (changes == null) changes = new List<ChangeEntry>(); changes.Add(new ChangeEntry() { changeType = changeType, element = element.ToString(), stackTrace = includeStacktrace ? Environment.StackTrace : null }); } if (printOnConsole) { Debug.Log($"{string.Join(",", changeType.toStrings()),-40} {element}"); } } [Serializable] public struct ChangeEntry { public string element; public VersionChangeType changeType; [TextArea(10, 30)] public string stackTrace; } } public static class ChangeTypeHelpers { public static List<string> toStrings(this VersionChangeType type) { var changes = new List<string>(); foreach (var value in (VersionChangeType[])Enum.GetValues(typeof(VersionChangeType))) { if ((type & value) != 0) changes.Add(value.ToString()); } return changes; } }