클라이언트에서 캠프 처치 없이도 ResourcePickup이 보이는 문제 수정

This commit is contained in:
2026-02-25 23:52:13 +09:00
parent 72fe5e5b04
commit a4eae438de
2 changed files with 71 additions and 21 deletions

View File

@@ -28,7 +28,74 @@ namespace Northbound
public GameObject pickupEffectPrefab;
public Transform effectSpawnPoint;
// 가시성 동기화 (기본적으로 숨김)
private NetworkVariable<bool> _isVisible = new NetworkVariable<bool>(
false,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server
);
private bool _isCollected = false;
private Renderer[] _renderers;
private Collider[] _colliders;
public override void OnNetworkSpawn()
{
base.OnNetworkSpawn();
// 렌더러와 콜라이더 캐시
_renderers = GetComponentsInChildren<Renderer>();
_colliders = GetComponentsInChildren<Collider>();
// 초기 가시성 적용
UpdateVisibility(_isVisible.Value);
// 가시성 변경 이벤트 구독
_isVisible.OnValueChanged += OnVisibilityChanged;
}
public override void OnNetworkDespawn()
{
_isVisible.OnValueChanged -= OnVisibilityChanged;
base.OnNetworkDespawn();
}
private void OnVisibilityChanged(bool previousValue, bool newValue)
{
UpdateVisibility(newValue);
}
private void UpdateVisibility(bool visible)
{
if (_renderers != null)
{
foreach (var renderer in _renderers)
{
if (renderer != null)
renderer.enabled = visible;
}
}
if (_colliders != null)
{
foreach (var collider in _colliders)
{
if (collider != null)
collider.enabled = visible;
}
}
}
/// <summary>
/// 가시성 설정 (서버만 호출 가능)
/// </summary>
public void SetVisible(bool visible)
{
if (IsServer)
{
_isVisible.Value = visible;
}
}
public bool CanInteract(ulong playerId)
{