RegisterUIReloadCallback
Registers a callback to be invoked when the UI is reloaded.
阅读时间2 分钟最后更新于 2 天前
Definition
- Type: Method
- Namespace: UnityEngine.UIElements
- Assembly: UnityEngine.UIElementsModule
RegisterUIReloadCallback(UIReloadCallback)
Registers a callback to be invoked when the UI is reloaded.
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 to initialize the UI, and reads the cached element in . 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.
AwakeUpdateExamples
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; }}