文档

Unity Engine

Unity Engine

RegisterUIReloadCallback

Registers a callback to be invoked when the UI is reloaded.
阅读时间2 分钟最后更新于 2 天前

Definition

RegisterUIReloadCallback(UIReloadCallback)

Registers a callback to be invoked when the UI is reloaded.
警告
Deprecated. Use RegisterUIReloadCallback(VersionedUIReloadCallback) instead, which provides a version number so the callback can skip redundant work when the UI has not actually changed.
public void RegisterUIReloadCallback(PanelRenderer.UIReloadCallback callback)

Parameters

The callback to register.

Remarks

This overload is deprecated. Use PanelRenderer.RegisterUIReloadCallback instead, which provides a version number so the callback can skip redundant work when the UI has not actually changed.

RegisterUIReloadCallback(VersionedUIReloadCallback)

Registers a versioned callback to be invoked when the UI is reloaded.
public void RegisterUIReloadCallback(PanelRenderer.VersionedUIReloadCallback callback)

Parameters

The callback to register.

Remarks

This callback will be invoked immediately if the root VisualElement is already initialized, and then every time the UI is reloaded afterwards. Use the version parameter to check if the root VisualElement was actually reloaded since the last time the callback was invoked.
The following example registers a callback in
Awake
to initialize the UI, and reads the cached element in
Update
. If the component is disabled and re-enabled, the version stays the same, so the callback skips the initialization logic. For more examples, refer to Panel Renderer script examples.

Examples

using UnityEngine;using UnityEngine.UIElements;[RequireComponent(typeof(PanelRenderer))]public class HealthBarController : MonoBehaviour{ PanelRenderer m_PanelRenderer; ProgressBar m_HealthBar; int m_UIVersion; float m_Health = 100f; void Awake() { m_PanelRenderer = GetComponent<PanelRenderer>(); m_PanelRenderer.RegisterUIReloadCallback(OnUIReload); } void OnDestroy() { m_PanelRenderer.UnregisterUIReloadCallback(OnUIReload); } void OnUIReload(PanelRenderer panelRenderer, VisualElement root, int version) { // Skip the setup if the visual tree hasn't been rebuilt since the last call. if (version == m_UIVersion) return; m_UIVersion = version; m_HealthBar = root.Q<ProgressBar>("health"); root.Q<Button>("heal").clicked += () => m_Health = 100f; } void Update() { m_Health = Mathf.Max(0f, m_Health - 5f * Time.deltaTime); // The UI isn't ready yet if the Panel Renderer has never been enabled. if (m_HealthBar == null) return; m_HealthBar.value = m_Health; }}