언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트

로비와 타이머 - 6) 플레이어 입력 제한

monstro 2026. 7. 9. 11:38
728x90
반응형

- 개요

로비에서의 플레이어의 입력제한하고

인게임 중에서 Pre Match 상태와 Post Match 상태에서도 플레이어의 입력제한한다

 

- 스크립트 작업

1) DedicatedServers 모듈 관련 스크립트

1 - 1) DSPlayerController 클래스

 

위와 같이 멤버 함수를 추가한다

 

 

OnRep_PlayerState 함수PlayerState서버에서 클라이언트복제 완료되었을 때 호출한다

로직을 위와 같이 구성하여 부모 버전의 함수를 호출하고 로컬 플레이어의 입력을 차단한다

 

 

PostSeamlessTravel 함수Seamless Travel완료된 후에 호출한다

로직을 위와 같이 구성하여 로컬 플레이어인지 확인한 후에 Server_Ping RPC 함수를 호출하여

단방향 데이터 전달 시간을 저장하고, 로컬 플레이어의 입력을 차단한다

 

 

BeginPlay 함수초기화가 끝나고 게임이 시작할 때 호출한다

로직을 위와 같이 구성하여 게임 모드가 스탠드 얼론이라면, 플레이어의 입력을 차단한다

 

 

서버에서 호출하여 클라이언트에서 수행하는 Client_SetInputEnabled RPC 함수를 추가한다

인자로 받은 bEnabled의 값에 따라 입력을 허용 또는 차단한다

 

1 - 2) DS_MatchGameMode 클래스

 

 

SetClientInputEnabled 함수를 추가한다

로직은 위와 같이 구성하여 월드에 존재하는 PlayerController를 순회하면서

DSPlayerController로 캐스팅한 후에 Client_SetInputEnabled RPC 함수를 호출한다

 

 

OnCountdownTimerFinished 함수에 위의 로직을 추가하여

PreMatch 상태는 Seamless Travel 이후이므로 이미 플레이어의 입력이 제한되어 있다

Match 상태에서는 플레이어의 입력을 허용하고, PostMatch 상태에서는 플레이어의 입력을 제한한다

 

2) 주 모듈 관련 스크립트

2 - 1) PlayerInterface 인터페이스

 

EnableGameActions 순수 가상 함수를 추가한다

해당 함수는 불리언 인자를 사용하고 필요한 경우 블루프린트에서 오버라이드할 수 있다

 

2 - 2) ShooterPlayerController 클래스

 

EnableInput 함수DisableInput 함수를 오버라이드한다

 

 

EnableInput 함수의 로직을 위와 같이 오버라이드하여

PlayerControllerPawn으로부터 EnableGameActions 함수를 호출하고 True를 넘겨준다

 

 

DisableInput 함수의 로직을 위와 같이 오버라이드하여

PlayerControllerPawn으로부터 EnableGameActions 함수를 호출하고 False를 넘겨준다

 

2 - 3) ShooterCharacter 클래스

 

PlayerInterface로부터 상속받은 EnableGameActions 함수를 오버라이드한다

 

 

또, 입력을 허용 또는 차단하기 위한 bEnableGameActions 멤버변수를 추가한다

 

 

생성자에 로직을 추가하여 bEnableGameActions 멤버변수의 값을 설정한다

 

 

EnableGameActions 함수의 로직은 위와 같다

인자로 받은 bEnable 값이 False라면 CombatComponentInitiate_FireWeapon_Released 함수를 호출하여

키 입력의 결과False로 설정한다

 

키 입력에 Bind되는 콜백 함수들

 

키 입력시에 호출하는 콜백 함수들에 위와 같이 로직을 추가하여

bEnableGameActions 변수가 False라면 얼리 리턴한다

 

- 블루프린트 작업

1) WBP_LobbyOverlay 위젯 블루프린트

 

Construct 함수를 위와 같이 구성하여 로비에서는 UI에만 입력이 동작할 수 있도록 설정한다

 

2) WBP_ShooterOverlay 위젯 블루프린트

 

Construct 함수시퀀스 노드를 추가한 후에 위와 같이 로직을 추가한다

인게임에서는 게임에서만 입력이 동작할 수 있도록 설정한다

 

- 최종 실행 결과

728x90
반응형