클라이언트에서 캠프 처치 없이도 ResourcePickup이 보이는 문제 수정
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user