- 개요
타이머의 구성에 필요한 타이머 핸들 클래스와 PlayerController 클래스를 추가한다
- 스크립트 작업
1) DSTypes 클래스

타이머의 현재 상태를 의미하는 CountdownTimerState 열거형 클래스를 추가한다
- NotStarted : 타이머가 아직 동작하지 않은 상태
- Started : 타이머가 동작하는 상태
- Paused : 타이머가 동작중에 중지된 상태
- Stopped : 타이머가 종료된 상태

타이머의 타입(목적)을 의미하는 CountdownTimerType 열거형 클래스를 추가한다
- LobbyCountdown : 로비의 타이머
- PreMatch : Pre Match의 타이머
- Match : Match의 타이머
- PostMatch : Post Match의 타이머
- None : 타이머의 기본 타입

CountdownTimerHandle 구조체를 추가하여 타이머를 쉽게 관리할 수 있도록 설계한다
멤버변수의 구성은 위와 같다
- State 멤버변수 : 관리할 타이머의 상태
- Type 멤버변수 : 관리할 타이머의 타입
- CountdownTime 멤버변수 : 타이머가 측정할 카운트다운
- CountdownUpdateInterval 멤버변수 : 카운트다운을 갱신할 간격
- FTimerHandle 타입 멤버변수들 : 특정 타이머를 찾을 수 있도록 해주는 고유한 식별자
- 종료 시점의 타이머와 업데이트 시점의 타이머에 대한 식별자
- FTimerDelegate 멤버변수들 : 타이머가 지정된 시간에 도달했을 때 호출하는 델리게이트
- 종료 시점과 업데이트 시점에 대해서 브로드캐스트할 용도

CountdownTimerHandle 구조체에 대한 == 연산자를 오버로딩한다
두 객체의 Type을 비교한 값을 반환한다
2) DSPlayerController 클래스

OnTimerStateChangedDelegate 델리게이트를 추가하여
실수와 CountdownTimerType의 2개의 인자를 받아 브로드캐스트할 수 있도록 설정한다

DSPlayerController 클래스는 위와 같이 구성하였다
멤버변수의 구성은 다음과 같다
- OnTimerUpdated 멤버변수 : 타이머가 갱신되었음을 전파할 델리게이트
- OnTimerStopped 멤버변수 : 타이머가 종료되었음을 전파할 델리게이트
- SingleTripTime 멤버변수 : 서버에서 클라이언트로, 또는 클라이언트에서 서버로 이루어지는 단방향 전송 시간

생성자의 로직을 위와 같이 구성하여 SingTripTime 변수의 값을 0초로 설정한다

ReceivedPlayer 함수를 위와 같이 오버라이드한다
해당 함수는 PlayerController가 네트워크에 완벽하게 연결되면 호출한다
로직을 위와 같이 구성하여 원격 서버가 존재하지 않는 경우를 방지하고
로컬 컨트롤러인지 확인한 후에, 클라이언트에서 Server_Ping RPC 함수를 호출한다

서버에서 호출하여 클라이언트에서 수행하는 2개의 RPC 함수의 로직을 위와 같이 구성한다
Client_TimerUpdated 함수에서는 OnTimerUpdated 델리게이트로 지연시간이 보정된 값을 브로드캐스트한다
Client_TimerStopped 함수에서는 OnTimerStopped 델리게이트로 지연시간이 보정된 값을 브로드캐스트한다

클라이언트에서 호출하여 서버에서 수행하는 Server_Ping RPC 함수를 위와 같이 구성한다
내부적으로 서버에서 Client_Pong RPC 함수를 호출하여 클라이언트에서 해당 함수를 수행한다

서버에서 호출하여 클라이언트에서 수행하는 Client_Pong RPC 함수를 위와 같이 구성한다
인자로 받은 TimeOfRequest를 현재 월드의 시간에서 빼서 데이터의 왕복 시간을 계산한다
이후 계산한 왕복 시간의 값의 절반을 SingleTripTime 변수에 저장한다
3) ShooterPlayerController 클래스(주 모듈)

ShooterPlayerController 클래스의 부모 클래스를 DSPlayerController 클래스로 변경한다
'언리얼 엔진 - 게임 프로젝트 > AWS GameLift를 활용한 데디케이트 FPS 프로젝트' 카테고리의 다른 글
| 로비와 타이머 - 4) 레벨 전환 및 서버 연결 상태에 따른 게임 데이터 보존과 관리 (0) | 2026.07.03 |
|---|---|
| 로비와 타이머 - 3) 매칭 게임 모드와 타이머 추가 (0) | 2026.07.02 |
| 로비와 타이머 - 1) 로비와 타이머 구성 (0) | 2026.06.26 |
| Access Tokens - 최종) 인증 헤더 추가 (0) | 2026.06.25 |
| Access Tokens - 12) PreToken 람다 트리거 생성 (0) | 2026.06.25 |