UE5

UE5 Multi SetTimer 안될때

우대비 2023. 5. 4. 21:18
반응형

높은 확률로 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