클라이언트에서 건설모드를 진입할 수 없는 문제 수정
This commit is contained in:
@@ -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<NetworkPlayerController>();
|
||||
|
||||
// 지연 초기화 - 다음 프레임에 체크
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user