Files
FORT-BO/Assets/CONTENT/Game/Scripts/UI/WorldSpaceCanvasCameraBinder.cs
T

53 lines
1.3 KiB
C#

using UnityEngine;
[DisallowMultipleComponent]
[RequireComponent(typeof(Canvas))]
public sealed class WorldSpaceCanvasCameraBinder : MonoBehaviour
{
[SerializeField] private Canvas targetCanvas;
public Canvas TargetCanvas => targetCanvas;
private void Reset()
{
targetCanvas = GetComponent<Canvas>();
RefreshBinding();
}
private void Awake() => ResolveCanvas();
private void OnEnable()
{
LocalPlayerCameraRegistry.Changed += HandleLocalCameraChanged;
RefreshBinding();
}
private void OnDisable() =>
LocalPlayerCameraRegistry.Changed -= HandleLocalCameraChanged;
public void RefreshBinding()
{
ResolveCanvas();
if (targetCanvas == null || targetCanvas.renderMode != RenderMode.WorldSpace)
return;
targetCanvas.worldCamera = LocalPlayerCameraRegistry.Current;
}
private void ResolveCanvas()
{
if (targetCanvas == null)
targetCanvas = GetComponent<Canvas>();
}
private void HandleLocalCameraChanged(Camera localCamera)
{
if (targetCanvas != null && targetCanvas.renderMode == RenderMode.WorldSpace)
targetCanvas.worldCamera = localCamera;
}
[ContextMenu("Refresh Local Player Camera")]
private void RefreshFromContextMenu() => RefreshBinding();
}