using System; using Unity.Netcode; using UnityEngine; public interface IPlayerSystem { void Initialize(PlayerFacade facade); } [RequireComponent(typeof(NetworkObject))] public sealed class PlayerFacade : NetworkBehaviour { [SerializeField] private MonoBehaviour[] initializationOrder; public event Action Initialized; public override void OnNetworkSpawn() { MonoBehaviour[] systems = initializationOrder.Length > 0 ? initializationOrder : GetComponents(); foreach (MonoBehaviour system in systems) if (system is IPlayerSystem playerSystem) playerSystem.Initialize(this); Initialized?.Invoke(this); } }