diff --git a/Assets/Scripts/BuildingPlacement.cs b/Assets/Scripts/BuildingPlacement.cs index f2643c4..07dc5cd 100644 --- a/Assets/Scripts/BuildingPlacement.cs +++ b/Assets/Scripts/BuildingPlacement.cs @@ -45,9 +45,35 @@ namespace Northbound // UI 체크 캐싱 (Input System 콜백 내에서 IsPointerOverGameObject() 사용 불가) private bool _isPointerOverUI = false; + // 플레이어 컨트롤러 참조 (로컬 플레이어 체크용) + private NetworkPlayerController _playerController; + private bool _isInitialized = false; + public override void OnNetworkSpawn() { - if (!IsOwner) return; + _playerController = GetComponent(); + + // 지연 초기화 - 다음 프레임에 체크 + StartCoroutine(InitializeAfterOwnerSet()); + } + + private System.Collections.IEnumerator InitializeAfterOwnerSet() + { + // _ownerPlayerId가 설정될 때까지 대기 (최대 1초) + float timeout = 1f; + while (_playerController != null && _playerController.OwnerPlayerId == ulong.MaxValue && timeout > 0) + { + yield return null; + timeout -= Time.deltaTime; + } + + // 로컬 플레이어인지 확인 + if (_playerController == null || !_playerController.IsLocalPlayer) + { + yield break; + } + + _isInitialized = true; _inputActions = new PlayerInputActions(); _inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode; @@ -118,7 +144,7 @@ namespace Northbound public override void OnNetworkDespawn() { - if (IsOwner && _inputActions != null) + if (_isInitialized && _inputActions != null) { _inputActions.Player.ToggleBuildMode.performed -= OnToggleBuildMode; _inputActions.Player.Rotate.performed -= OnRotate; @@ -134,7 +160,7 @@ namespace Northbound private void Update() { - if (!IsOwner) return; + if (!_isInitialized) return; // UI 체크 캐싱 (Input System 콜백 내에서 사용하기 위해) _isPointerOverUI = CheckPointerOverUI();