전장의 안개 로직 개선

미탐험지역은 검게 덮음. 탐험된 지역은 어두운 색, 보고 있는 블록은 밝은색
This commit is contained in:
2026-01-18 23:37:43 +09:00
parent 733ea30631
commit b4ac8f600f
11 changed files with 302 additions and 100 deletions

View File

@@ -80,22 +80,33 @@ public class MineableBlock : NetworkBehaviour
void Update()
{
// 1. 서버에서 한 번이라도 발견되었고
// 2. 최근(0.2초 이내)에 플레이어의 시야 범위 안에 있었다면 렌더러를 켭니다.
bool isCurrentlyVisible = (Time.time - _lastVisibleTime) < VisibilityThreshold;
if (_renderer != null)
// 1. 이미 발견된 블록인지는 서버 변수(isDiscovered)로 확인
// 2. 현재 내 위치가 안개에서 벗어났는지 확인 (매우 단순화된 로직)
if (!isDiscovered.Value)
{
// 실시간 시야: 발견되었더라도 지금 근처에 플레이어가 없으면 다시 숨깁니다.
_renderer.enabled = isDiscovered.Value && isCurrentlyVisible;
float dist = Vector3.Distance(transform.position, NetworkManager.Singleton.LocalClient.PlayerObject.transform.position);
if (dist < FogOfWarManager.Instance.revealRadius)
{
// 서버에 "나 발견됐어!"라고 보고
RequestRevealServerRpc();
}
}
// 1. 이미 발견된 블록만 실시간 시야 연산을 수행합니다.
if (!isDiscovered.Value) return;
// 3. 비주얼 업데이트: 발견된 적이 있을 때만 렌더러를 켬
if (_renderer != null)
{
_renderer.enabled = isDiscovered.Value;
}
UpdateState();
}
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
private void RequestRevealServerRpc()
{
isDiscovered.Value = true;
}
private void UpdateState()
{
if (_renderer == null) return;
@@ -104,7 +115,7 @@ public class MineableBlock : NetworkBehaviour
bool isCurrentlyVisible = (Time.time - _lastVisibleTime) < VisibilityThreshold;
// 3. 상태에 따라 색상과 렌더러 상태를 결정합니다.
_renderer.enabled = true; // 발견된 상태이므로 항상 켭니다.
if (_renderer.enabled == false) return;
_renderer.GetPropertyBlock(_propBlock);
// 2. 시야 내에 있으면 원본 색상(_originalColor), 멀어지면 어둡게 만든 색상을 적용합니다.