From 9c6a9910cb66fa45156ce00b5da027045974f04f Mon Sep 17 00:00:00 2001 From: dal4segno Date: Wed, 25 Feb 2026 22:23:59 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B1=B4=EC=84=A4=EB=AA=A8=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=A7=84=EC=9E=85=ED=95=A0=20=EC=88=98=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/BuildingPlacement.cs | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) 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();