using UnityEngine; using Unity.Netcode; using System.Collections; public class PlayerFacade : NetworkBehaviour { // [SerializeField] private PlayerController playerController; [SerializeField] private PlayerMovement playerMovement; [SerializeField] private PlayerHealth playerHealth; [SerializeField] private PlayerShoot playerShoot; [SerializeField] private PlayerShield playerShield; [SerializeField] private PlayerUIController playerUIController; public PlayerHealth PlayerHealth => playerHealth; public override void OnNetworkSpawn() { // Клон (GhostPlayer) — серверный объект. На хосте он считается IsOwner, // из-за чего перехватывал HUD игрока. Игроковую логику на клоне не запускаем. if(GetComponent() != null) return; if(IsOwner) { StartCoroutine(InitPlayerUIController()); if(playerMovement != null) { playerMovement.Init(); } if(playerShoot != null) { playerShoot.Init(); } if (playerShield != null) playerShield.InitInput(); } if(playerHealth != null) { playerHealth.Init(IsServer); } } private IEnumerator InitPlayerUIController() { yield return new WaitUntil(() => { playerUIController = FindFirstObjectByType(); return playerUIController != null; }); if(playerUIController != null) { playerUIController.Init(this); } } }