반응형
높은 확률로 Client와 Server에서 같은 TimerHandle을 사용하고 있을거임
이럴때는 Server에서 SetTimer후 Timer 작동시 Client로 Multicast해주면 됨
UFUNCTION(Server, Reliable)
void StartRound();
void StartRound_Implementation();
int serverTime = 15;
void AEnemyManager::StartRound_Implementation()
{
if (GetNetMode() != NM_DedicatedServer) return;
UKismetSystemLibrary::PrintString(GetWorld(), FString::Printf(TEXT("Server Time : %d"), serverTime));
serverTime--;
SyncTime(serverTime); // Client로 ServerTime 전달
if (serverTime == 0)
{
if (isbreakTime) // 쉬는시간 종료
{
isbreakTime = false;
serverTime = 30;
float createTime = FMath::RandRange(minTime, maxTime);
GetWorld()->GetTimerManager().SetTimer(spawnTimerHandle, this, &AEnemyManager::SpawnEnemy, createTime);
}
else // 쉬는시간 시작
{
isbreakTime = true;
serverTime = 15;
GetWorld()->GetTimerManager().ClearTimer(spawnTimerHandle);
}
}
GetWorldTimerManager().SetTimer(roundTimerHandle, this, &AEnemyManager::StartRound, 1.0f);
}
UFUNCTION(NetMulticast, Reliable)
void SyncTime(int currTime);
void SyncTime_Implementation(int currTime);
void AEnemyManager::SyncTime_Implementation(int currTime)
{
if (GetNetMode() == NM_DedicatedServer)
return;
roundUI->roundTime = currTime ;
if (currTime == 0)
{
if (isbreakTime) // 쉬는시간 종료
{
isbreakTime = false;
roundUI->roundTime = 30;
}
else // 쉬는시간 시작
{
isbreakTime = true;
roundUI->roundTime = 15;
}
}
}
반응형
LIST
'UE5' 카테고리의 다른 글
UE Multi Widget Interaction (0) | 2023.05.10 |
---|---|
UE Multi Spawn Actor Replication (0) | 2023.05.04 |
UE Multi Niagara Spawn (0) | 2023.05.03 |
UE Multi AnimMontage 동기화 (0) | 2023.05.03 |
UE Multi UserWidget 중복되지 않게 화면에 띄우기 (0) | 2023.05.03 |