네트워크 멀티플레이 환경 문제 수정

관련 문제가 다시 발생하면 이 커밋으로 돌아올 것
This commit is contained in:
2026-02-02 04:24:14 +09:00
parent 3e747a9d97
commit 10b496dfae
49 changed files with 2860 additions and 1792 deletions

View File

@@ -259,19 +259,14 @@ namespace Northbound
if (!CanInteract(playerId))
return;
// 플레이어 인벤토리 가져오기
var playerObject = NetworkManager.Singleton.ConnectedClients[playerId].PlayerObject;
if (playerObject == null)
return;
var playerInventory = playerObject.GetComponent<PlayerResourceInventory>();
if (playerInventory == null)
var resourceManager = ServerResourceManager.Instance;
if (resourceManager == null)
{
Debug.LogWarning($"플레이어 {playerId}에게 PlayerResourceInventory 컴포넌트가 없습니다.");
Debug.LogWarning("ServerResourceManager 인스턴스를 찾을 수 없습니다.");
return;
}
int playerResourceAmount = playerInventory.CurrentResourceAmount;
int playerResourceAmount = resourceManager.GetPlayerResourceAmount(playerId);
if (playerResourceAmount <= 0)
{
Debug.Log($"플레이어 {playerId}가 건낼 자원이 없습니다.");
@@ -282,16 +277,13 @@ namespace Northbound
if (depositAll)
{
// 전부 건네기
depositAmount = playerResourceAmount;
}
else
{
// 일부만 건네기
depositAmount = Mathf.Min(depositAmountPerInteraction, playerResourceAmount);
}
// 무제한 저장소가 아니면 용량 제한 확인
if (!unlimitedStorage)
{
int availableSpace = maxStorageCapacity - _totalResources.Value;
@@ -304,10 +296,8 @@ namespace Northbound
return;
}
// 플레이어로부터 자원 차감
playerInventory.RemoveResourceServerRpc(depositAmount);
// 코어에 자원 추가
resourceManager.RemoveResource(playerId, depositAmount);
UpdatePlayerResourcesClientRpc(playerId);
_totalResources.Value += depositAmount;
Debug.Log($"<color=green>[Core] 플레이어 {playerId}가 {depositAmount} 자원을 건넸습니다. 코어 총 자원: {_totalResources.Value}" +
@@ -316,6 +306,20 @@ namespace Northbound
ShowDepositEffectClientRpc();
}
[Rpc(SendTo.ClientsAndHost)]
private void UpdatePlayerResourcesClientRpc(ulong playerId)
{
var playerObject = NetworkManager.Singleton.ConnectedClients[playerId].PlayerObject;
if (playerObject != null)
{
var playerInventory = playerObject.GetComponent<PlayerResourceInventory>();
if (playerInventory != null)
{
playerInventory.RequestResourceUpdateServerRpc();
}
}
}
[Rpc(SendTo.ClientsAndHost)]
private void ShowDepositEffectClientRpc()
{