UDN
Search public documentation:

GametypeTechnicalGuideKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 게임플레이 프로그래밍 > 게임타입 테크니컬 가이드

게임타입 테크니컬 가이드


문서 변경내역: Jeff Wilson 작성. 홍성진 번역.

개요


언리얼 엔진으로 만든 게임은 모두 하나 이상의 게임타입을 왔다갔다합니다. 이러한 개념은 언리얼 토너먼트같은 게임에서 명확한데, 여기서는 사용자가 데쓰매치, 깃발뺏기, 최후의 1인 등등의 게임타입을 직접 선택하기도 합니다. 그러나 스포츠, 레이싱, RTS, RPG 등과 같은 게임조차 사용자에게 명백하긴 해도, 전부 게임타입에 의존합니다.

게임타입은 게임의 규칙을 정하는 것입니다: 게임을 어떻게 시작할지, 점수는 어떻게 얻고 이벤트는 어떻게 처리되는지, 게임 끝을 위해서는 어떤 조건을 만족해야 하는지 등등의 것들입니다. 게임과 그 게임타입은 레벨-특정이기도 하며, (전통적인 관점에서는) 새 레벨이 로드되면 새 게임타입이 로드됩니다. (레벨 스트리밍은 현재 게임타입을 나가면서 현재 레벨에 로드합니다.) 데쓰매치 게임에서, 게임타입은 게임 내 다양한 위치에 플레이어와 봇을 스폰시키고, 각 플레이어의 킬을 처리하여 점수를 기록하고, 시간이 다하거나 한 플레이어가 필요 킬 수를 달성했을 때 게임을 종료시킵니다. 모두 단순한 작업으로, 다른 게임에도 똑같은 개념이 적용됩니다. 조금씩 복잡할 수는 있겠지만 말입니다.

예를 들어 어드벤처 롤-플레잉 게임을 상상해 봅시다. 플레이어가 게임을 시작하면, 게임타입은 플레이어를 월드의 던전의 입구처럼 지정된 위치나 지난 번 게임을 저장할 때 플레이어가 있던 위치같은 곳에 스폰시킵니다. 플레이어는 월드를 탐험하다가 던전으로 옵니다. 플레이어가 던전에 들어서면, 새 레벨과 게임타입이 로드됩니다. 이 게임타입은 플레이어를 던전 입구에 스폰시킨 다음 플레이어가 던전 임무를 완수할 때까지 대기합니다. 보스를 죽인다든지 특정 아이템을 모든다든지 말입니다. 게임타입이 던전이 완료되었음을 감지하면, 플레이어를 메인 월드로 되돌려 보내고, 메인 월드 레벨을 로드합니다. 메인 월드에서, 게임타입은 플레이어를 던전 앞쪽에 스폰시키고, 플레이어가 탐험을 계속하여 게임의 임무를 전부 완수할 때까지 대기합니다.

확실히 게임에 유기적으로 작용하는 게임타입이 여럿 있기에 훨씬 복잡한 경우겠지만, 각 게임타입의 개념은 데쓰매치 게임의 것과 다를 바가 없습니다.

GameInfo 클래스


GameInfo 클래스는 언리얼의 모든 게임타입에 대한 베이스 클래스입니다. 맵이 로드될 때마다 적합한 GameInfo 클래스의 인스턴스가 새로 생성되어 게임타입으로 할당됩니다. 특정 레벨에 대한 게임타입이 어떻게 설정되는지에 대한 세부 정보는 게임 수명주기 부분을 참고하시기 바랍니다.

GameInfo 프로퍼티

Arbitration 중재

  • bUsingArbitration 중재 사용? - 참이면 게임은 중재를 사용합니다.
  • bHasArbitratedHandshakeBegun 중재 핸드셰이크 시작됨? - 참이면 중재 핸드셰이크가 발생한 것입니다. 핸드셰이크가 시작되면 새 연결은 거부됩니다.
  • bNeedsEndGameHandshake 게임끝 핸드셰이크 필요? - 참이면 게임 종료시 핸드셰이크를 수행해야 합니다.
  • bHasEndGameHandshakeBegun 게임끝 핸드셰이크 시작됨? - 참이면 게임끝 핸드셰이크가 시작된 것입니다.
  • bIsEndGameHandshakeComplete 게임끝 핸드세이크 완료됨? - 참이면 게임끝 핸드셰이크가 완료된 것입니다.
  • ArbitrationHandshakeTimeout 중재 핸드셰이크 타임아웃 - 전역설정. 클라이언트가 중재 핸드셰이킹을 하기 위한 기한으로, 지나면 추방됩니다.
  • PendingArbitrationPCs 계류중인 중재 PC - 게임이 핸드셰이크를 수행할 대상으로써 대기중인 PlayerControllers 배열입니다.
  • ArbitrationPCs 중재 PC - 게임이 핸드셰이크를 수행한 PlayerControllers 배열로, 온라인 서브시스템으로 쓰여진 중재 데이터의 마무리를 요청합니다.

Cheat Detection 치트 검출

  • [Min/Max]TimeMargin [최소/최대] 시간 한도 - 클라이언트 시간이 서버 시간에서 이 정도 전/후에 있다면 스피드 핵 검출이 발동되지 않습니다.
  • TimeMarginSlack 시간 한도 휴지기 - 클라이언트 시간이 서버 시간과 다를 때 이 정도의 휴지기를 가진 후에 스피드 핵 검출이 발동됩니다.
  • bIsStandbyCheckingEnabled 스탠바이 검사 켜짐? - 참이면 게임은 스탠바이 치트 검사를 수행합니다.
  • bIsStandbyCheckingOn 스탠바이 검사중? - 참이면 스탠바이 치트 검사중입니다.
  • bHasStandbyCheatTriggered 스탠바이 치트 발동됨? - 참이면 스탠바이 치트가 검출된 것입니다.
  • Standby[Rx/Tx]CheatTime 스탠바이 [Rx/Tx] 치트 시간 - 치트 코드 발동 전에 패킷/승인을 받지 않는 기간.
  • BadPingThreshold 악성 핑 한계 - 이보다 핑이 높으면 지연 패킷 또는 전송 연결이 악성인 서버로 간주합니다.
  • PercentMissingFor[Rx/Tx]Standby [Rx/Tx] 스탠바이용 분실 퍼센트 - 분실 패킷/승인 데이터가 되도록 허용된 클라이언트의 퍼센트로, 넘어가면 스탠바이 코드가 발동됩니다.
  • PercentForBadPing 악성 핑용 퍼센트 - 악성 핑 값에 허용된 클라이언트의 퍼센트로, 넘어가면 스탠파이 코드가 발동됩니다.
  • JoinInProgressStandbyWaitTime 참가절차중 대기 시간 - 스탠바이 문제에 대한 연결을 검사하기까지 대기할 기간입니다.

Game Components 게임 컴포넌트

  • PlayerControllerClass - 게임타입에 새 플레이어가 로그인했을 때 사용할 PlayerController 클래스입니다.
  • DefaultPawnClass - 게임타입에 새 플레이어가 로그인했을 때 사용할 Pawn 클래스입니다.
  • HUDType - 게임타입에 HUD 용으로 사용할 HUD 클래스입니다.
  • PlayerReplicationInfoClass - 게임타입에 새 플레이어가 로그인했을 때 사용할 PlayerReplicationInfo 클래스입니다.
  • GameReplicationInfoClass - 게임타입에 사용할 GameReplicationInfo 클래스입니다.
  • OnlineSub - 게임타입이 사용할 OnlinSubsystem 인스턴스로, 플랫폼 레이어의 서비스와 통신할 때 사용합니다.
  • GameInterface - 온라인 게임을 만들고 검색하고 없앨 때 게임타입이 사용하는 OnlineGameInterface 인스턴스입니다.
  • OnlineStatsWriteClass - 클라이언트로 전송하기 위해 그 상태를 생성하고 담기 위해 사용할 OnlineStatsWrite 클래스입니다.
  • OnlineGameSettingsClass - 온라인 서비스로 전용 서버를 등록할 때 사용할 OnlineGameSettings 클래스입니다.
  • DeathMessageClass - 플레이어가 죽을 때 메시지를 표시하는 데 사용할 LocalMessage 클래스입니다.
  • GameMessageClass - 게임플레이 이벤트 관련 메시지 표시에 사용할 GameMessage 클래스입니다.
  • AccessControlClass - 게임타입에 사용할 AccessControl 클래스입니다.
  • AccessControl - 플레이어가 게임에 들어가고/거나 관리자가 될 수 있을지를 제어하는 AccessControl 인스턴스입니다.
  • BroadcastHandlerClass - 게임타입에 사용할 BroadcastHandler 클래스입니다.
  • BroadcastHandler - 게임타입에 메시지 표시용으로 사용할 BroadcastHandler 인스턴스입니다.
  • AutoTestManagerClass - 게임타입에 사용할 AutoTestManager 클래스입니다.
  • MyAutoTestManager - 자동화 테스팅 관리에 사용할 AutoTestManager 인스턴스입니다. 명령줄을 통해 요청되었을 때만 존재합니다.

Game Settings 게임 세팅

  • bRestartLevel 레벨 재시작? - 참이면 플레이어가 죽을때 레벨을 재시작해야 합니다.
  • bTeamGame 팀 게임? - 참이면 게임이 팀 게임으로, 즉 플레이어가 둘 이상의 팀으로 나뉘어 있음을 뜻합니다. 베이스 GameInfo 내에 팀을 만들기 위한 로직이 내장되어 있지는 않습니다. 단지 게임에 팀이 있음을 나타낼 뿐입니다.
  • bGameEnded 게임 종료됨? - 참이면 게임 종료 조건이 만족된 것입니다. EndGame() 에 의해 설정됩니다.
  • bOverTime 오버 타임? - 참이면 게임이 오버타임 중입니다. EndGame() 가 호출은 되었으나 일부 조건이 충족되지 않아서 CheckEndGame() 이 거짓을 반환할 때 발생하는 경우입니다.
  • bDelayedStart 지연 시작? - 참이면 플레이어가 참가하는 즉시 게임이 시작되지 않습니다.
  • bWaitingToStartMatch 경기 시작 대기? - 게임이 PendingMatch 상태이면, 게임 시작 대기중이면 참입니다.
  • bChangeLevels 레벨 변경? - GLOBALCONFIG. 참이면 게임이 재시작될 때 새 맵이 로딩됩니다.
  • bAlreadyChanged 이미 변경됨? - bChangeLevels=TRUE 이고 게임이 재시작될 때 새 맵의 로딩 프로세스가 시작되면 참입니다.
  • bGameRestarted 게임 재시작됨? - 게임이 재시작되면 참입니다.
  • bLevelChange 레벨 변경? - 레벨 변천이 (ProcessServerTravel() 를 통해) 진행중이면 참입니다.
  • GameDifficulty 게임 난이도 - GLOBALCONFIG. 게임의 난이도 변경자입니다. 극히 게임-전용이므로 이 것의 적용은 서브클래스에서 해야 합니다.
  • GoreLevel 고어 레벨 - GLOBALCONFIG. 표시할 고어의 양입니다. 값이 0 이면 보통의 고어 양이며, 값이 커지면 줄어듭니다.
  • GameSpeed 게임 속도 - 게임 시간용 스케일 인수입니다. WorldInfo.TimeDilation 를 설정하는 데 사용됩니다.
  • MaxSpectators 최대 관람자 - GLOBALCONFIG. 서버으 게임타입에 허용되는 최대 플레이어 수입니다.
  • MaxSpectatorsAllowed 최대 허용 관람자 - 게임타입에 허용되는 관람자의 최대 수입니다. MaxSpectators 는 환경설정에서 설정되어 변경될 수 있기에 상식적인 값으로 제한하기 위해 사용됩니다.
  • NumSpectators 관람자 수 - 게임에 현재 있는 관람자 수입니다.
  • MaxPlayers 최대 플레이어 - GLOBALCONFIG. 서버의 게임타입에 허용되는 최대 플레이어 수입니다.
  • MaxPlayersAllowed 최대 허용 플레이어 - 게임타입에 허용되는 최대 플레이어 수입니다. MaxPlayers 는 환경설정에서 설정되어 변경될 수 있기에 상식적인 값으로 제한하기 위해 사용됩니다.
  • NumPlayers 플레이어 수 - 게임에 현재 인간이 제어하는 플레이어 수입니다.
  • NumBots 봇 수 - 게임에 현재 AI가 제어하는 플레이어의 수입니다.
  • NumTravellingPlayers 이동중인 플레이어 수 - 예전 맵에서 아직도 이동중인 플레이어의 수입니다.
  • CurrentID 현재 ID - PlayerID 를 생성하면서 각 PlayerReplicationInfo 에다 고유 PlayerID 를 할당하기 위해 사용되는 현재 ID 입니다.
  • DefaultPlayerName 디폴트 플레이어 이름 - 현지화됨. 게임타입에 대한 플레이어에 이름을 할당할 때 사용할 디폴트 이름 접두사입니다.
  • GameName 게임 이름 - 현지화됨. 게임타입에 표시할 이름입니다.
  • FearCostFalloff FearCost 감쇠 - bDoFearCostFalloff=true 일 때, NavigationPoints 에 대한 FearCost 를 시간에 따라 얼마나 빨리 감쇠시킬지를 결정합니다.
  • bDoFearCostFalloff FeatCost 감쇠시킬지? - 참이면 NavigationPoints 에 대한 FearCost 가 시간에 따라 감쇠됩니다.
  • GoalScore 목표 점수 - 플레이어가 경기를 끝내기 위해 필요한 "점수"입니다. 많은 게임에서 일종의 점수같은 것을 기록하여 일정한 점수를 획득하면 게임을 종료시키기는 하지만, 점수란 임의적인 개념입니다.
  • MaxLives 최대 생명 - 플레이어에게 매치당 허용된 최대 생명 횟수입니다.
  • TimeLimit 시간 제한 - 단일 매치에 허용된 기간입니다.
  • GameInfoClassAliases GameInfo 클래스 별칭 - 게임타입에 대한 짧은 이름을 풀 클래스명으로 매핑시키는 GameClassShortName 구조체의 배열입니다.
  • DefaultGameType 디폴트 게임타입 - CONFIG. 별달리 (게임타입 클래스로의 전체 경로를 지정하는 문자열 형태로) 지정된 게임타입이 없을 때 사용할 기본 게임타입입니다.
  • DefaultMapPrefixes 디폴트 맵 접두사 - CONFIG. 레벨 이름의 접두사를 특정 게임타입에 매핑시키는 GameTypePrefix 구조체 배열입니다. 지정된 게임타입이 없을 때 사용할 게임타입을 정하는 데 사용됩니다. DefaultGameType 을 덮어씁니다. 자세한 것은 게임타입 접두사 부분 참고.
  • CustomMapPrefixes 커스텀 맵 접두사 - CONFIG. 레벨 이름의 접두사를 특정 게임타입에 매핑시키는 GameTypePrefix 구조체의 배열입니다. 지정된 게임타입이 없을 때 사용할 게임타입을 정하는 데 사용됩니다. DefaultGameType 을 덮어씁니다. 자세한 것은 게임타입 접두사 부분을 확인하시기 바랍니다.
  • bRequiresPushToTalk 푸시-투-토크 필요? - 참이면 이 게임타입은 푸시-투-토크 상태로 음성 통신됩니다. 아니면 음성 통신은 항상 열려 있습니다.

Mutator 뮤테이터

  • BaseMutator 베이스 뮤테이터 - 게임타입에 적용된 첫 Mutator 로의 참조입니다.

Network/Replication 네트워크/리플리케이션

  • InactivePRIArray 비활성PRI 배열 - 게임을 떠난 플레이어의 PlayerReplicationInfos 배열입니다. 그 플레이어가 재접속할 때를 대비해 저장됩니다.
  • bKickLiveIdlers 살아있는 빈둥쟁이 추방? - GLOBALCONFIG. 참이면 Pawn 을 가진 PlayerControllers 가 빈둥거리면(idle) 게임에서 추방될 수 있습니다.
  • MaxIdleTime 최대 빈둥 시간 - 이 기간 이상으로 빈둥거린 플레이어를 추방할 수 있습니다.
  • LeaderboarId 리더보드 ID - 스킬/점수용 통계를 쓸 리더보드의 ID입니다.
  • ArbitratedLeaderBoardId 중재된 리더보드 ID - 스킬/점수용 통계를 쓸 중재된 리더보드의 ID입니다.
  • bUseSeamlessTravel 심리스 트래블 사용? - 참이면 백그라운드로 로드하고 클라이언트의 접속을 끊지 않는 SeamlessTravel() 을 사용하여 맵 이동을 처리합니다.
  • CoverReplicatorBase 커버 리플리케이터 베이스 - 전용 서버가 등록을 시작할 때 적용할 URL 옵션 문자열입니다.
  • bHasNetworkError 네트워크 에러 있는지? - 서버의 맵 이동을 방해하는 치명적인 네트워크 에러가 발생하면 참입니다.
  • ServerOptions 서버 옵션 - 전용 서버가 등록을 시작할 때 적용할 URL 옵션 문자열입니다.
  • AdjustNetSpeed 넷 속도 조절 - 리슨 서버용 넷 속도를 동적으로 관리하기 위해 현재 사용하는 조절된 넷 속도입니다.
  • LastNetSpeedUpdateTime 지난 넷 속도 업데이트 시간 - 클라이언트가 들어오거나 나가서 지난 번 서버에 대한 넷 속도가 업데이트된 시간입니다.
  • TotalNetBandwidth 총 넷 대역폭 - GLOBALCONFIG. 리슨 서버에 사용가능한 대역폭의 총량으로, 넷 연결마다 동적으로 분할됩니다.
  • [Min/Max]DynamicBandwidth [최소/최대] 동적 대역폭 - 연결마다 동적으로 설정되는 최소/최대 대역폭 량입니다.

Pausing 일시정지

  • bPauseable 일시정지 가능? - 참이면 온라인 플레이시 플레이어가 게임을 일시정지시킬 수 있습니다. 1인용 게임일 때는 언제든지 멈출 수 있습니다.
  • bAdminCanPause 관리자가 일시정지 가능? - 참이면 온라인 플레이시 관리자가 게임을 일시정지시킬 수 있습니다.
  • Pausers - 게임을 재개시킬 수 있는지 결정하기 위해 ClearPause() 내에서 검사되는 delegate 배열입니다.

Profiling/Testing 프로파일링/테스팅

  • bFixedPlayerStart 플레이어 시작점 고정? - 참이면 게임은 프로파일링 일관성을 위해 동일한 스폰 지점을 사용합니다. GameInfo 에는 그런 함수성이 없습니다. 서브클래스에서 스폰 지점을 선택하는 로직에 추가되어야 합니다.
  • CauseEventCommand 이벤트 명령 유발 - 맵 URL 로 게임에 전달된 콘솔 이벤트를 담습니다. 보통 자동 비행 시작 등 테스팅에 사용됩니다. GameInfo 에는 이 명령을 실행시키는 함수성이 없습니다. 서브클래스에 추가되어야 합니다.
  • BugLocString Bug 위치 문자열 - 맵 URL 로 게임에 전달된 BugIt 위치 문자열을 담습니다.
  • BugRotString Bug 회전 문자열 - 맵 URL 로 게임에 전달된 BugIt 회전 문자열을 담습니다.

GameInfo 함수

Game 게임

  • OnEngineHasLoaded 엔진 로드 완료시 - 시동시 엔진이 로드될 때 네이티브 코드에서 호출되는 이벤트입니다. 새 맵(에 따른 게임타입)이 로드될 때마다가 아닌 , 게임이 처음 시작될 때만 딱 한 번 호출됩니다.
  • GetSupportedGameTypes [InFilename] [OutGameType] [bCheckExt] 지원 게임타입 구하기 - 주어진 맵 이름에 대한 GameTypePrefix 구조체를 구합니다. 자세한 것은 게임타입 접두사 부분 참고
    • InFilename - 게임타입을 구할 맵 이름입니다.
    • OutGameType - Out. 주어진 맵에 연결된 GameTypePrefix 구조체를 출력합니다.
    • bCheckExt - 옵션. 참이면 맵 이름 파일 확장자를 검사하여 사용가능한 맵 파일인지 확인합니다.
  • GetMapCommonPackageName [InFilename] [OutCommonPackageName] 맵 공용 패키지 이름 구하기 - 주어진 맵 파일명에 대해 (있다면) 공용 패키지의 이름을 구합니다. 있으면 참을 반환합니다. 맵에 대한 GameTypePrefix 가 없거나 GameTypePrefix 가 공용 패키지를 사용하지 않는다면 거짓을 반환합니다. 자세한 것은 공용 패키지 부분 참고.
    • InFilename - 공용 패키지 이름을 구할 맵 이름입니다.
    • OutCommonPackageName - Out. 공용 패키지의 이름을 출력합니다.
  • GetDefaultGameClassPath [MapName] [Options] [Portal] 디폴트 게임 클래스 경로 구하기 - 지정된 맵과 옵션에 사용할 최적 GameInfo 클래스로의 전체 경로를 반환합니다. 쿠킹된 패키지 등을 미리 로드하는 데 사용되므로 예비를 포함할 필요가 없습니다. 나중에 SetGameType() 가 희망 클래스를 실제로 찾아/로드하기 위해 호출될 것이기 때문입니다.
    • MapName - 디폴트 게임타입을 구할 맵 이름입니다.
    • Options - 있다면 맵에 대한 URL 에서의 옵션 문자열입니다.
    • Portal - 있다면 플레이어를 보낼 목적지 포탈 이름입니다.
  • SetGameType [MapName] [Options] [Portal] 게임타입 설정 - 지정된 맵과 지정된 옵션으로 게임에 스폰시킬 GameInfo 클래스를 반환합니다. 이 함수는 바라는 클래스를 찾을 수 없는 경우의 예비를 포함해야 합니다.
    • MapName - 게임타입을 구할 맵 이름입니다.
    • Options - 있다면 맵에 대한 URL 에서의 옵션 문자열입니다.
    • Portal - 있다면 플레이어를 보낼 목적지 포탈 이름입니다.
  • InitGame [Options] [ErrorMessage] 게임 초기화 - 파라미터 초기화 및 게임타입에 대한 헬퍼 클래스 스폰을 위해 다른 스크립트 실행 전 엔진에 의해 호출됩니다.
    • Options - 있다면 맵에 대한 URL 에서의 옵션 문자열입니다.
    • ErrorMessage - Out. 게임타입 초기화 도중 발생한 에러 메시지를 출력합니다.
  • StartMatch 경기 시작 - 모든 액터에 경기가 시작되고 있고 플레이어에 대한 Pawn 을 스폰한다 알립니다.
  • Reset 리셋 - 게임타입을 초기 상태로 리셋시킵니다. 다른 모든 Actor 가 리셋된 이후 호출됩니다.
  • ShouldReset [ActorToReset] 리셋해야할지 - 주어진 Actor 가 리셋 가능한지를 결정합니다. 주어진 Actor 가 게임 재시작 도중 거기서 Reset() 을 호출하게 해야하면 참을 반환하고, GameInfo 가 수동으로 리셋하거나 액터에 리셋이 필요없는 경우 거짓을 반환합니다.
    • ActorToReset - 리셋시킬 Actor 입니다.
  • ResetLevel 레벨 리셋 - 모든 Controller, 다음엔 모든 Actor, 다음엔 GameInfo 에서 Reset() 을 호출하여 레벨을 리셋합니다.
  • RestartGame 게임 재시작 - bChangeLevels=TRUE 인 경우 맵을 바꾸거나 현재 맵을 다시 로드하여 게임을 재시작합니다.
  • EndGame [Winner] [Reason] - 게임 종료 처리를 수행합니다. 게임 조건이 충족되었을 때 호출되어야 합니다.
    • Winner - 게임을 이긴 플레이어의 PlayerReplicationInfo 입니다.
    • Reason - 게임이 종료되는 이유를 나타내는 String 입니다. 예를 들어 "TimeLimit", "LastMan", "DungeonComplete" 등입니다.
  • CheckEndGame [Winner] [Reason] 게임 종료 검사 - 주어진 이유에 따라 게임을 정말 끝내야 할지 검사하기 위해 EndGame() 에서 호출됩니다. 부가 게임-전용 변경을 위해서는 서브클래스에서 이를 덮어써야 합니다.
    • Winner - 게임을 이긴 플레이어의 PlayerReplicationInfo 입니다.
    • Reason - 게임이 종료되는 이유를 나타내는 String 입니다. 예를 들어 "TimeLimit", "LastMan", "DungeonComplete" 등입니다.
  • CheckModifiedEndGame [Winner] [Reason] 변경된 게임 종료 검사 - 게임 종료 조건의 변경 허용을 위해 CheckEndGame() 에서 호출됩니다. 디폴트로 모든 Mutator 에서 CheckEndGame() 을 호출합니다.
    • Winner - 게임을 이긴 플레이어의 PlayerReplicationInfo 입니다.
    • Reason - 게임이 종료되는 이유를 나타내는 String 입니다. 예를 들어 "TimeLimit", "LastMan", "DungeonComplete" 등입니다.
  • PerformEndGameHandling 게임 종료 처리 수행 - 온라인 플레이어에 대한 게임 종료 처리를 수행합니다.
  • GameEnding 게임 종료중 - 게임타입에 게임이 종료중이라 알리고자 엔진에 의해 호출됩니다. 즉 어플리케이션 종료중이거나 새 맵 로딩중이란 뜻입니다.
  • PreExit 종료전 - 엔진이 종료중임을 게임에 알리고자 엔진에 의해 호출됩니다.
  • MatchIsInProgress 경기 진행중인지 - 경기가 현재 진행중인지를 반환합니다.
  • GameEventsPoll 게임 이벤트 투표 - 주기적으로 커스텀 게임 로깅용 통계 코드의 도입점으로 활용되는 함수 토막입니다. 로깅이 시작될 때 GameplayeStatsWriterPoll() 타이머에 의해 주기적으로 호출됩니다. 커스텀 통계 로깅을 추가하려면 서브클래스에서 이를 덮어써야 합니다.
  • EndLogging [Reason] 로깅 종료 - 통계 로깅 중지용 함수 토막입니다. 통계 로깅 중지를 위한 로직을 추가하려면 서브클래스에서 이를 덮어써야 합니다.
    • Reason - 로깅을 종료하기 위한 이유를 나타내는 String 입니다.

Travel 이동

  • ProcessServerTravel [URL] [bAbsolute] 서버 이동 처리 - 서버를 새 레벨로 점프시키는 작업을 처리합니다.
    • URL - 이동할 맵의 URL 입니다.
    • bAbsolute - 참이면 절대 이동이, 거짓이면 상대 이동이 사용됩니다.
  • ProcessClientTravel [URL] [NextMapGuid] [bSeamless] [bAbsolute] 클라이언트 이동 처리 - 모든 라이언트에게 지정된 URL 로 이동하라고 알립니다.
    • URL - 이동할 맵의 URL 입니다.
    • NextMapGuid - 다음 맵 서버 버전의 GUID 입니다.
    • bSeamless - 참이면 심리스 이동이 사용됩니다.
    • bAbsolute - 참이면 절대 이동이, 거짓이면 상대 이동이 사용됩니다.
  • SendPlayer [aPlayer] [URL] - 플레이어를 주어진 URL 로 보냅니다.
    • aPlayer - 새로운 URL 로 보낼 플레이어의 PlayerController 입니다.
    • URL - 이동할 맵의 URL 입니다.
  • GetNextMap - 플레이어들이 다음 게임 용으로 이동해야 할 맵을 반환하는 함수 토막입니다. 게임에 맵 사이클이 있어야 하면 서브클래스에서 이를 덮어써야 합니다.
  • GetTravelType - 어떤 유형의 이동을 사용해야할 지 결정합니다. 절대 이동은 참, 상대 이동은 거짓을 반환합니다.
  • PreCommitMapChange [PreviousMapName] [NextMapName] - CommitMapChange() 로 기존 레벨을 언로드하기 전에 엔진에 의해 호출되는 이벤트 토막입니다.
    • PreviousMapName - 언로드할 맵 이름입니다.
    • NextMapName - 로드되고 있는 맵 이름입니다.
  • PostCommitMapChange 맵 변경 승인 이후 - CommitMapChange() 로 기존 레벨 언로드 및 새 레벨 로드 이후 엔진에 의해 호출되는 이벤트 토막입니다.
  • GetSeamlessTravelActorList [bToEntry] [ActorList] 심리스 이동 액터 목록 구하기 - 심리스 레벨 전환 도중 새 레벨 속으로 옮겨야 하는 액터 목록을 구하기 위해 서버상의 엔진에 의해 호출됩니다. PlayerController, Role < ROLE_Authority Actor, 목록에 있는 Actor 내부의 non-Actor, 예로 목록의 Object.Outer = Actor= 는 여기에 포함되었는가 여부에 관계 없이 자동으로 옮겨집니다. PersistentLevel 에 있는 동적인 (bStatic and bNoDelete) 액터만 옮겨야 합니다 (여기에는 게임플레이 도중 스폰된 모든 액터가 포함됩니다.) 중간에 액터가 바뀔 수 있기에 전환 양쪽 부분에서 호출해야 합니다. (플레이어가 게임에 들어오거나 나갔을 수 있습니다.)
    • bToEntry - 참이면 서버는 예전 레벨 -> entry 로 이동중입니다. 거짓이면 서버는 entry -> 새 레벨로 이동중입니다.
    • ActorList - Out. 옮길 Actor 배열을 출력합니다.
  • PostSeamlessTravel 심리스 이동 이후 - 심리스 레벨 전환이 완료된 이후 GameInfo 상의 엔진에 의해 호출됩니다. 보통 게임에 이미 있어 Login() 을 호출하지 않아도 되는 플레이어를 재초기화시키고자 할 때 사용합니다.
  • HandleSeamlessTravelPlayer [C] 심리스 이동 플레이어 처리 - 심리스 레벨 전환을 통해 남아있는 플레이어의 재초기화를 처리합니다. PostSeamlessTravel() 및 서버 이후에 로딩을 마친 플레이어의 엔진에서 호출됩니다.
    • C - 처리할 플레이어의 Controller 입니다.
  • SetSeamlessTravelViewTarget [PC] 심리스 이동 뷰타겟 설정 - 심리스 레벨 전환을 통해 남아있는 플레이어에 대한 ViewTarget 을 설정합니다.
    • PC - ViewTarget 에 대해 설정할 PlayerController 입니다.

Player 플레이어

  • PreLogin [Options] [Address] [ErrorMessage] 로그인 전 - 서버에 참가하는 플레이어를 받거나 거부합니다.
    • Options - 있다면 맵에 대한 URL 에서의 옵션 문자열입니다.
    • Address - 연결하는 플레이어의 IP 주소입니다.
    • ErrorMessage - Out. 실패한 로그인 에러 메시지를 출력합니다. 여기 String 이 비어있지 않으면 로그인이 실패했단 뜻입니다.
  • Login [Portal] [Options] [UniqueID] [ErrorMessage] 로그인 - 플레이어를 로그인시키고 그에 대한 PlayerController 를 스폰시킵니다. 스폰된 PlayerController 를 반환합니다.
    • Portal - 있다면 플레이어를 보낼 목적지 포털 이름입니다.
    • Options - 있다면 맵에 대한 URL 에서의 옵션 문자열입니다.
    • UniqueID - 로그인하는 플레이어에 대한 UniqueNetID 입니다.
    • ErrorMessage - Out. 실패한 로그인 에러 메시지를 출력합니다. 여기 String 이 비어있지 않으면 로그인이 실패했단 뜻입니다.
  • PostLogin [NewPlayer] 로그인 이후 - 플레이어가 로그인에 성공한 이후 플레이어 셋업을 처리하고자 엔진에 의해 호출됩니다.
    • NewPlayer - 로그인한 플레이어의 PlayerController 입니다.
  • Logout [Exiting] 로그아웃 - 게임에서 플레이어를 제거하여 소멸시킬 때 Controller 에서 호출됩니다.
    • Exiting - 게임을 나가는 플레이어의 Controller 입니다.
  • SpawnDefaultPawnFor [NewPlayer] [StartSpot] 디폴트 폰 스폰 - DefaultPawnClass 를 사용하여 주어진 Controller 에 대한 Pawn 을 스폰시키고 반환합니다.
    • NewPlayer - Pawn 을 스폰시킬 플레이어의 Controller 입니다.
    • StartSpot - Pawn 을 스폰시킬 NavigationPoint 입니다.
  • GetDefaultPlayerClass [C] 디폴트 플레이어 클래스 구하기 - 주어진 Controller 에 사용할 디폴트 Pawn 클래스를 반환합니다.
    • C - Pawn 클래스를 구할 Controller 입니다.
  • StartHumans 인간 시작 - RestartPlayer() 호출로 인간 제어 플레이어를 시작합니다.
  • StartBots 봇 시작 - RestartPlayer() 호출로 AI 제어 플레이어를 시작합니다.
  • RestartPlayer [NewPlayer] 플레이어 재시작 - 시작 지점을 찾아, Pawn 을 스폰하고, 플레이어에 대한 디폴트 인벤토리를 추가하는 등 (인간이나 AI) 플레이어를 재시작합니다.
    • NewPlayer - 재시작할 플레이어의 Controller 입니다.
  • GenericPlayerInitialization [C] 범용 플레이어 초기화 - 트래블 메서드 PostLogin()HandleSeamlessTravelPlayer() 간에 공유되는 플레이어 초기화 전부를 처리합니다.
    • C - 초기화시킬 플레이어의 Controller 입니다.
  • UnregisterPlayer [PC] 플레이어 등록해제 - 플레이어가 게임을 나갈 때 네임드 세션에서 제거합니다.
    • PC - 게임을 나가는 플레이어의 PlayerController 입니다.
  • AtCapacity [bSpectator] 정원이 찼는지 - 게임 정원이 가득 찼는지 아닌지를 반환합니다.
    • bSpectator - 참이면 게임 관람자 자리가 가득 찼는지 반환합니다. 거짓이면 게임이 플레이어 자리가 가득 찼는지 반환합니다.
  • GetNumPlayers 플레이어 수 구하기 - 게임 내 플레이어의 수를 반환합니다.
  • GetNextplayerID 다음 플레이어 ID 구하기 - 참가하는 플레이어에 사용할 다음 ID를 반환합니다.
  • SetPlayerDefaults [PlayerPawn] 플레이어 디폴트 설정 - 특정 플레이어 Pawn 프로퍼티를 디폴트 값으로 리셋시킵니다. RestartPlayer() 에서 호출됩니다.
    • PlayerPawn - 프로퍼티를 리셋시킬 Pawn 입니다.
  • CanSpectate [Viewer] [ViewTarget] 관람 가능 - 주어진 PlayerReplicationInfo 의 시점에서 주어진 PlayerController 의 관람이 허용되는지를 반환합니다.
    • Viewer - 관람자의 PlayerController 입니다.
    • ViewTarget - 관람할 PlayerReplicationInfo 입니다.
  • ChangeName [Other] [S] [bNameChange] 이름 변경 - 주어진 플레이어의 이름을 지정된 이름으로 변경합니다.
    • Other - 플레이어의 Controller 입니다.
    • S - 플레이어에게 지어 줄 이름입니다.
    • bNameChange - 미사용.
  • ChangeTeam [Other] [N] [bNewTeam] 팀 변경 - 주어진 플레이어의 팀을 지정된 팀으로 변경합니다.
    • Other - 플레이어의 Controller 입니다.
    • N - 플레이어가 속하게 될 팀 번호입니다.
    • bNewteam - 미사용.
  • PickTeam [Current] [C] 팀 고르기 - 플레이어가 속하게 될 실제 팀 번호를 반환합니다.
    • Current - 플레이어가 속하게 될 임시 팀 번호입니다.
    • C - 플레이어의 Controller 입니다.
  • PlayerCanRestartGame [aPlayer] 플레이어가 게임 재시작 가능 - 플레이어가 게임을 재시작시킬 수 있는지 여부를 반환합니다.
    • aPlayer - 재시작을 요청하는 플레이어의 PlayerController 입니다.
  • PlayerCanRestart [aPlayer] 플레이어가 재시작 가능 - 주어진 플레이어의 재시작이 허용되었는지를 반환합니다.
    • aPlayer - 재시작을 요청하는 플레이어의 PlayerController 입니다.
  • SwapPlayerControllers [OldPC] [NewPC] 플레이어 콘트롤러 스왑 - 심리스 이동시 뷰포트/연결의 PlayerController 를 맞바꾸며, 새 게임타입의 Controller 클래스는 기존 것과 다릅니다.
    • OldPC - 기존 게임타입에서 플레이어에 대한 PlayerController 입니다.
    • NewPC - 새 게임타입에서 플레이어에 대한 PlayerController 입니다.

Navigation 내비게이션

  • DoNavFearCostFalloff Nav FearCost 감쇠 수행 - bDoFearCostFalloff=true 일 때 내비게이션 포인트 fear cost 감쇠를 업데이트합니다. GameInfoTimer() 에서 호출됩니다.
  • NotifyNavigationChanged [N] 내비게이션 변경 알림 - 내비게이션 포인트가 막히거나 풀려서 월드의 AI에 루트를 업데이트하라고 알릴 수 있도록 게임타입에 알리는 함수 토막입니다.
    • N - 변경된 NavigationPoint 입니다.
  • ShouldSpawnAtStartSpot [Player] 시작 지점에서 스폰? - 주어진 플레이어의 StartSpot 프로퍼티를 그 Pawn 에 대한 스폰 위치로 사용할지 여부를 반환합니다.
    • Player - 플레이어의 Controller 입니다.
  • FindPlayerStart [Player] [InTeam] [IncomingName] 플레이어 시작 찾기 - 이 플레이어의 시작 위치로 최적인 NavigationPoint 를 반환합니다. PlayerStart 등급은 RatePlayerStart() 로 매깁니다.
    • Player - 플레이어의 Controller 입니다.
    • InTeam - 옵션. 플레이어가 속한 팀 번호입니다.
    • IncomingName - 옵션. 시작 위치로 사용할 텔레포터의 태그를 지정합니다.
  • ChoosePlayerStart [Player] [InTeam] 플레이어 시작 선택 - 주어진 플레이어가 시작할 최적의 PlayerStart 를 반환합니다. PlayerStart 등급은 RatePlayerStart() 로 매깁니다.
    • Player - 플레이어의 Controller 입니다.
    • InTeam - 옵션. 플레이어가 속한 팀 번호입니다.
  • RatePlayerStart [P] [Team] [Player] 플레이어 시작 등급 - 주어진 플레이어와 팀에 대해 주어진 PlayerStart 가 얼마나 바람직한지 등급을 반환합니다.
    • P - 등급을 구할 PlayerStart 입니다.
    • Team - 플레이어가 속한 팀 번호입니다.
    • Player - 플레이어의 Controller 입니다.

Inventory 인벤토리

  • ShouldRespawn [Other] 리스폰해야할지? - 주어진 PickupFactory 를 리스폰해야할지 여부를 반환합니다. 디폴트로 아이템은 멀티플레이 게임에서만 리스폰 허용됩니다.
    • Other - 리스폰시킬 아이템의 PickupFactory 입니다.
  • AddDefaultInventory [P] 디폴트 인벤토리 추가 - 주어진 Pawn 에 대한 디폴트 인벤토리를 (Pawn::AddDefaultInventory() 를 통해) 스폰시킵니다. RestartPlayer() 에서, 그리고 Pawn 을 스폰하는 ActorFactory 에서도 호출합니다.
    • P - 디폴트 인벤토리를 줄 Pawn 입니다.
  • PickupQuery [Other] [ItemClass] [Pickup] 픽업 질의 - 주어진 플레이어가 주어진 아이템을 집을 수 있는지 여부를 반환합니다. Pawn 이 아이템을 집으려 할 때 PickupFactory 또는 DroppedPickup 에 의해 호출됩니다.
    • Other - 아이템을 집으려 하는 Pawn 입니다.
    • ItemClass - 아이템의 Inventory 클래스입니다.
    • Pickup - 아이템을 포함하는 Actor, 예로 PickupFactory 입니다.
  • DiscardInventory [Other] [Killer] 인벤토리 버리기 - 플레이어가 죽은 이후 인벤토리를 없애거나 버립니다.
    • Other - 죽은 플레이어의 Controller 입니다.
    • Killer - 옵션. 죽은 플레이어를 죽인 플레이어가 있다면 그 Controller 입니다.

Messages 메시지

  • BroadcastDeathMessage [Killer] [Other] [damageType] 죽음 메시지 방송 - 한 플레이어가 (Killer) 다른 플레이어를 (Other) 죽일 때 DeathMessageClass 에서 메시지를 출력합니다. BroadcastLocalized() 를 호출합니다.
    • Killer - 다른 플레이어를 죽인 플레이어의 Controller 입니다. (플레이어가 죽인게 아니면) None, (자살같은) Other 도 가능합니다.
    • Other - 죽은 플레이어의 Controller 입니다.
    • damageType - 플레이어를 죽게 만든 DamageType 입니다.
  • Broadcast [Sender] [Msg] [Type] 방송 - 게임의 모든 플레이어에게 주어진 메시지를 표시합니다.
    • Sender - 메시지 초기화를 담당하는 Actor 입니다.
    • Msg - 표시할 메시지를 나타내는 String 입니다.
    • Type - 옵션. 전송되는 메시지의 부가 "유형"을 제공하기 위해 사용 가능한 Name 입니다.
  • BroadcastTeam [Sender] [Msg] [Type] 팀 방송 - 발신자와 같은 팀의 플레이어 전부에게 주어진 메시지를 표시합니다.
    • Sender - 메시지 초기화를 담당하는 Actor 입니다.
    • Msg - 표시할 메시지를 나타내는 String 입니다.
    • Type - 옵션. 전송되는 메시지의 부가 "유형"을 제공하기 위해 사용 가능한 Name 입니다.
  • BroadcastLocalized [Sender] [Message] [Switch] [RelatedPRI_1] [RelatedPRI_2] [OptionalObject] 현지화된 방송 - 게임 내 모든 플레이어에게 현지화된 메시지를 표시합니다.
    • Sender - 메시지 초기화를 담당하는 Actor 입니다.
    • Message - 메시지를 구하는 데 사용할 LocalMessage 클래스입니다.
    • Switch - 옵션. 표시할 메시지 인덱스입니다.
    • RelatedPRI_1 - 옵션. 메시지에 표시되는 정보를 구하는 데 사용 가능한 PlayerReplicationInfo 입니다.
    • RelatedPRI_2 - 옵션. 메시지에 표시되는 정보를 구하는 데 사용 가능한 PlayerReplicationInfo 입니다.
    • OptionalObject - 옵션. 메시지 표시에 사용 가능한 Object 입니다. 예를 들어 LocalMessage 클래스의 디폴트 행위는 이를 Class 오브젝트로 간주하여, 표시할 (BroadcastDeathMessage 에 사용되는) 메시지를 얻기 위해 거기서 GetLocalString() 을 호출하는 것입니다.
  • BroadcastLocalizedTeam [TeamIndex] [Sender] [Message] [Switch] [RelatedPRI_1] [RelatedPRI_2] [OptionalObject] 현지화된 팀 방송 - 주어진 팀의 모든 플레이어에 현지화된 메시지를 표시합니다.
    • TeamIndex - 메시지를 표시할 팀 번호입니다.
    • Sender - 메시지 초기화를 담당하는 Actor 입니다.
    • Message - 메시지를 얻어올 LocalMessage 클래스입니다.
    • Switch - 옵션. 표시할 메시지 인덱스입니다.
    • RelatedPRI_1 - 옵션. 메시지에 표시되는 정보를 구하는 데 사용 가능한 PlayerReplicationInfo 입니다.
    • RelatedPRI_2 - 옵션. 메시지에 표시되는 정보를 구하는 데 사용 가능한 PlayerReplicationInfo 입니다.
    • OptionalObject - 옵션. 메시지를 표시하는 데 사용할 수 있는 Object 입니다. 예를 들어 LocalMessage 클래스의 기본 행위는 이를 Class 오브젝트로 간주하여 표시할 (BroadcastDeathMessage 에 사용되는) 메시지를 얻기 위해 거기서 GetLocalString() 을 호출하는 것입니다.

Kick 추방

  • KickIdler [PC] 빈둥쟁이 추방 - AccessControl::KickPlayer() 를 통해 주어진 플레이어를 제거합니다.
    • PC - 추방할 플레이어의 PlayerController 입니다.
  • Kick [S] - 게임에서 주어진 플레이어를 제거합니다.
    • S - 제거할 플레이어를 지정하는 String 입니다. 플레이어의 PlayerName 또는 PlayerID 가 되어야 합니다.
  • ForceKickPlayer [PC] [KickReason] 플레이어 강제 추방 - 관리자 상태와 무관하게 주어진 플레이어를 게임에서 제거합니다.
    • PC - 추방할 플레이어의 PlayerController 입니다.
    • KickReason - 제거되는 플레이어에 해당하는 이유를 나타내는 String 입니다.
  • KickBan [S] 영구추방 - 주어진 플레이어를 게임에서 영구추방시켜, 재입장을 거부합니다.
    • S - 제거될 플레이어를 지정하는 String 입니다. 플레이어의 PlayerName 또는 PlayerID 여야 합니다.

Network/Replication 네트워크/리플리케이션

  • InitGameReplicationInfo 게임 리플리케이션 정보 초기화 - 게임에 대한 GameReplicationInfo 를 초기화시킵니다.
  • StartOnlineGame 온라인 게임 시작 - 온라인 시스템에 게임을 시작하고 콜백을 대기하도록 하기 위해 StartMatch() 에서 호출됩니다. 연결된 각 클라이언트에게 그 세션을 진행중인 것으로 마크하라 일러줍니다.
  • OnStartOnlineGameComplete [SessionName] [bWasSuccessful] StartOnlineGame 완료시 - 온라인 시스템이 게임 시작 절차를 완료했을 때 호출됩니다.
    • SessionName - 세션의 Name 입니다.
    • bWasSuccessful - 참이면 온라인 시스템은 게임 시작 절차를 성공적으로 완수한 것이며, 클라이언트가 등록될 것입니다.
  • EndOnlineGame 온라인 게임 종료 - 온라인 시스템에 게임을 종료하고 모든 클라이언트에게도 같은 작업을 하라 일러주기 위해 PerformEndGameHandling() 에서 호출됩니다.
  • GetNetworkNumber 네트워크 번호 구하기 - 호스트 기계의 IP 주소를 반환합니다.
  • RequiresPassword 패스워드 필요 - 게임에 참가하려면 암호가 필요한지 여부를 반환합니다.
  • ReplicateStreamingStatus [PC] 스트리밍 상태 리플리케이트 - 주어진 PlayerController 로 현재 레벨 스트리밍 상태를 리플리케이트합니다.
    • PC - 스트리밍 상태를 리플리케이트할 플레이어의 PlayerController 입니다.
  • BestNextHostSort [A] [B] 차선 호스트 정렬 - 주어진 호스트 중 어느 것을 선호할만한지 반환합니다. 연결이 가장 대등한 클라이언트가 처음에 옵니다. 그런 다음 최신의 플레이어가 선호되도록 참가 시간에 따라 정렬합니다.
    • [A/B] - 정렬할 호스트의 PlayerControllers 입니다.
  • UpdateBestNextHosts 차선 호스트 업데이트 - 현재 서버상의 차선 호스트 목록을 업데이트하고, 그 목록을 모든 클라이언트에 리플리케이트합니다.
  • UpdateNetSpeeds 넷 속도 업데이트 - 게임 내 모든 PlayerController 를 새로운 속도로 업데이트합니다.
  • CalculatedNetSpeed 계산된 넷 속도 - MinDynamicBandwidthMaxDynamicBandwidth 사이로 제한된 현재 넷 속도를 계산합니다.
  • WriteOnlineStats 온라인 통계 쓰기 - 모든 클라이언트에 통계를 쓴 다음 로컬 통계 쓰기를 처리하라 합니다.
  • WriteOnlinePlayerScores 온라인 플레이어 점수 쓰기 - 경기가 중재된 경우, 모든 클라이언트에 플레이어 점수를 복사하여 쓰도록 합니다. 중재되지 않은 경우, 첫 로컬 플레이어만 점수를 쓰도록 합니다.
  • UpdateGameSettings 게임 세팅 업데이트 - 게임을 검색하는 플레이어에게 공개할 필요가 있는 게임 세팅 변경사항을 업데이트하기 위해 사용되는 함수 토막입니다. 서브클래스에서 이를 덮어써야 합니다.
  • UpdateGameSettingsCounts 게임 세팅 수 업데이트 - 랜 경기에 플레이어 수가 올바르게 표시되도록 플레이어 수에 대한 온라인 서브시스템 정보를 업데이트합니다.
  • ProcessClientRegistrationCompletion [PC] [bWasSuccessful] 클라이언트 등록 완료 처리 - 주어진 플레이어가 중재 등록을 완료했음을 게임에 알리기 위한 함수 토막입니다. 등록 완료 처리를 하려면 서브클래스에서 이를 덮어써야 합니다.
    • PC - 등록을 완료한 플레이어의 PlayerController 입니다.
    • bWasSuccessful 성공적이었는지? - 참이면 등록 성공입니다.
  • StartArbitrationRegistration 중재 등록 시작 - 비동기 등록을 시작해 버리는 함수 토막입니다. 서브클래스에서 이를 덮어써야 합니다.
  • StartArbitratedMatch 중재된 경기 시작 - 중재된 경기를 시작하는 함수 토막입니다. 서브클래스에서 이를 덮어써야 합니다.
  • RegisterServerForArbitration 중재용 서버 등록 - 중재용 서버를 등록하는 함수 토막입니다. 서브클래스에서 이를 덮어써야 합니다.
  • ArbitrationRegistrationComplete [SessionName] [bWasSuccessful] 중재 등록 완료 - 중재용 서버 등록이 완료되었을 때 호출되는 함수 토막입니다.
    • SessionName - 세션의 Name 입니다.
    • bWasSuccessful - 참이면 등록 성공입니다.
  • NotifyArbitratedMatchEnd 중재된 경기 종료 알림 - 중재된 경기가 종료될 때 호출되어 모든 클라이언트에 접속을 끊은 다음 메뉴로 가라 합니다.
  • ProcessServerLogin 프로세스 서버 로그인 - 명령줄에 전달된 로그인 파라미터를 검사합니다. 있으면 전용 서버 등록 프로세스 시작 전 비동기 로그인을 합니다. 로그인 진행중이면 참을 반환합니다.
  • ClearAutoLoginDelegates 자동 로그인 델리게이트 비우기 - 로그인 프로세스를 통과하거나 실패하면 로그인 델리게이트를 비웁니다.
  • OnLoginFailed [LocalUserNum] [ErrorCode] 로그인 실패시 - 서버 로그인에 실패하면 호출되며, ClearAutoLoginDelegates() 를 호출합니다.
    • LocalUserNumber - 연관된 사용자의 콘트롤러 번호입니다.
    • ErrorCode - 발생한 EOnlineServerConnectionStatus 비동기 에러 코드입니다.
  • OnLoginChanged [LocalUserNum] 로그인 변경시 - 서버 로그인이 완료되고 서버가 등록되면 호출됩니다.
    • LocalUserNumber - 미사용.
  • RegisterServer 서버 등록 - 온라인 서비스로 전용 서버를 등록합니다.
  • OnServerCreateComplete [SessionName] [bWasSuccessful] 서버 생성 완료시 - 전용 서버 등록이 완료되었을 때 호출됩니다.
    • SessionName - 세션의 Name 입니다.
    • bWasSuccessful - 참이면 등록 성공입니다.
  • TellClientsToReturnToPartyhost 클라이언트에 파티호스트로 돌아오라 하기 - 플레이어 콘트롤러를 반복처리하며 그 파티로 돌아가라 합니다.
  • TellClientsToTravelToSession [SessionName] [SearchClass] [PlatformSpecificInfo] 클라이언트에 세션으로 이동하라 하기 - 플레이어 콘트롤러를 반복처리하며 원격 플레이어더러 지정된 세션으로 이동하라 합니다.
    • SessionName - 등록할 세션 Name 입니다.
    • SearchClass - 세션에 채워져야 할 OnlineGameSearch 클래스입니다.
    • PlatformSpecificInfo - 플랫폼-특정 구역에 놓을 바이너리 데이터입니다.
  • AddInactivePRI [PRI] [PC] 비활성 PRI 추가 - 주어진 PlayerReplicationInfo 를 비활성 목록에 추가시키고 활성 목록에서 제거합니다.
    • PRI - 비활성 목록에 추가시킬 플레이어의 PlayerReplicationInfo 입니다.
    • PC - PRI 에 관련된 플레이어의 PlayerController 입니다.
  • FindInactivePRI [PC] 비활성 PRI 찾기 - 주어진 재입장 플레이어에 관련된 PRI를 찾아 반환합니다.
    • PC - 플레이어의 PlayerController 입니다.
  • OverridePRI [PC] [OldPRI] PRI 덮어쓰기 - 주어진 플레이어의 PlayerReplicationInfo 프로퍼티를 로그인 프로세스 도중 할당된 구 PlayerReplicationInfo 의 프로퍼티로 필요한 만큼 덮어씁니다.
    • PC - 플레이어의 PlayerController 입니다.
    • OldPRI - 로그인시 할당된 프로퍼티를 담고 있는 PlayerReplicationInfo 입니다.

Pausing 일시정지

  • CanUnpause 재개 가능 - Delegate. 게임 재개를 요청받았을 때 그 행위가 허용되었는가를 알아보기 위해 호출됩니다. 게임 재개가 가능하면 참을 반환합니다. 기본 구현은 모든 요청 승인입니다.
  • SetPause [PC] [CanUnpauseDelegate] 일시정지 설정 - 게임을 일시정지하고, 주어진 플레이어가 게임을 정지시킬 권한이 있으면 목록에 델리게이트를 추가합니다. 게임이 정지된 이유가 해결됐다든지 해서 게임을 재개해도 괜찮은지, 알아보기 위해 델리게이트가 호출됩니다.
    • PC - 게임 일시정지를 시도하는 플레이어의 PlayerController 입니다.
    • CanUnpauseDelegate CanUnpause 델리게이트 - (=CanUnpause 델리게이트의 시그너처에 일치하는) 델리게이트로, 이번 일시정지를 해제시킬 수 있는지 알아보기 위해 호출됩니다.
  • ClearPause 일시정지 해제 - 일시정지가 해제 가능한지 알아보기 위해 델리게이트 목록을 검사합니다. 델리게이트가 재개해도 괜찮다 하면, 그 델리게이트는 목록에서 제거되며 나머지가 검사됩니다. 목록이 비면 게임이 재개된 것으로 간주합니다.
  • ForceClearUnpauseDelegates [PauseActor] 강제 ClearUnpause 델리게이트 - 오브젝트의 CanUnpause 델리게이트를 일시정지 목록에서 강제로 제거합니다. 오브젝트의 CanUnpause 델리게이트 핸들러가 목록에 있었다면, ClearPause() 로의 호출을 트리거시킵니다. 플레이어 콘트롤러가 소멸중에 있어, 게임이 재개되기 전 게임을 일시정지시킨 PC가 그 상태에 갖히는 것을 방지하기 위해 호출됩니다.
    • PauseActor - 이 Actor 에 대한 모든 CanUnpause 델리게이트를 비웁니다.
  • AllowPausing [PC] 일시정지 허용 - 주어진 플레이어가 게임 일시정지시킬 수 있는지를 반환합니다.
    • PC - 게임 일시정지 요청을 하는 플레이어의 PlayerController 입니다.

Gameplay 게임플레이

  • SetGameSpeed [T] 게임 속도 설정 - 게임 속도와 월드 TimeDilation (시간 팽창)을 주어진 값으로 설정합니다. 게임의 Timer() 실행 빈도를 조절합니다.
  • AllowCheats [P] 치트 허용 - 치트를 게임에 허용할지 여부를 반환합니다. 디폴트는 오프라인 게임에서만 치트 허용입니다.
  • UpdateGameplayMuteList [PC] 게임플레이 뮤트 목록 업데이트 - 게임타입에 플레이어의 게임플레이 특정 뮤트 정보를 지금 업데이트해도 좋다고 알리기 위해 사용합니다. Player 는 그렇게 할 수 있을때나 고유 넷 ID가 틀려 뮤팅이 작동하지 않을 때 서버에 알려야 합니다.
    • PC - 뮤팅 정보를 업데이트할 플레이어의 PlayerController 입니다.
  • RecalculateSkillRating 스킬 등급 재계산 - 이 게임에 대해 광고된 스킬을 업데이트하기 위해 게임타입이 사용합니다.
  • MatineeCancelled 마티네 취소됨 - 이 PC가 시네마틱 모드에 있을 때, 그리고 그 마티네가 사용자에 의해 취소되었을 때 호출됩니다.
  • GetCoverReplicator 커버 리플리케이터 구하기 - 게임에 대한 CoverReplicatorBase 를 반환합니다. 존재하는 것이 없으면, 새로이 스폰시킨 다음 반환시킵니다.
  • NotifyKilled [Killer] [Killed] [KilledPawn] [damageType] 피살 알림 - 주어진 플레이어가 피살되었을 때 알립니다. Killed() 에서 호출됩니다.
    • Killer - 죽인 플레이어의 Controller 입니다.
    • Killed - 죽은 플레이어의 Controller 입니다.
    • KilledPawn - 죽은 플레이어의 Pawn 입니다.
    • damageType - 플레이어의 죽음에 관계된 피해의 DamageType 입니다.
  • Killed [Killer] [KilledPlayer] [KilledPawn] [damageType] - Called by the Pawn to notify the game it has been killed.
    • Killer - 죽인 플레이어의 Controller 입니다.
    • Killed - 죽은 플레이어의 Controller 입니다.
    • KilledPawn - 죽은 플레이어의 Pawn 입니다.
    • damageType - 플레이어의 죽음에 관계된 피해의 DamageType 입니다.
  • PreventDeath [KilledPawn] [Killer] [DamageType] [HitLocation] 죽음 방지 - 게임에 피살되는 Pawn 덮어쓰기를 허용하기 위해 Pawn 에 의해 호출됩니다.
    • KilledPawn - 죽은 플레이어의 Pawn 입니다.
    • Killer - 죽인 플레이어의 Controller 입니다.
    • DamageType - 플레이어의 죽음에 관계된 피해의 DamageType 입니다.
    • HitLocation - 플레이어의 사인이 된 피격 위치를 나타내는 Vector 입니다.
  • ReduceDamage [Damage] [injured] [instigatedBy] [HitLocation] [Momentum] [DamageType] [DamageCauser] 피해 감소 - 플레이어가 피해를 입었을 때 피해량을 변경할 수 있도록 하기 위해 TakeDamaer() 에서 호출됩니다.
    • Damage - Out. 입힐 피해량을 출력합니다.
    • injured - 피해입는 플레이어의 Pawn 입니다.
    • instigatedBy - 피해를 담당하는 플레이어의 Controller 입니다.
    • HitLocation - 피해를 유발한 적중 위치를 나타내는 Vector 입니다.
    • Momentum - 피해에 의해 적용된 동력의 방향과 세기를 나타내는 Vector 입니다.
    • DamageType - 피해 유형입니다.
    • DamageCauser - 실제 피해를 입힌 Actor 입니다.
  • AddObjectiveScore [Scorer] [Score] 목표 점수 추가 - 목표를 완수한 후 주어진 플레이어의 점수를 증가시킵니다.
    • Scorer - 플레이어의 PlayerReplicationInfo 입니다.
    • Score - 플레이어의 점수에 더할 양입니다.
  • ScoreObjective [Scorer] [Score] 점수 목표 - 플레이어 점수에 더한 다음, 목표 완수 후 게임을 끝내야 하는지 검사합니다.
    • Scorer - 플레이어의 PlayerReplicationInfo 입니다.
    • Score - 플레이어의 점수에 더할 양입니다.
  • CheckScore [Scorer] 점수 검사 - 주어진 플레이어의 점수에 따라 게임을 끝내야 하는지 알아보기 위해 ScoreObjective() 에 의해 호출됩니다.
    • Scorer - 플레이어의 PlayerReplicationInfo 입니다.
  • ScoreKill [Killer] [Other] 점수 킬 - 플레이어 점수에 더한 다음, 킬 후 게임을 끝내야 하는지 검사합니다.
    • Killer - 플레이어의 죽음을 유발한 플레이어의 Controller 입니다.
    • Other - 죽은 플레이어의 Controller 입니다.

Options 옵션

  • GrabOption [Options] [Result] 옵션 집기 - 옵션 문자열에서 다음 키 값 쌍을 파싱해 냅니다. 쌍을 찾았으면 참을 반환합니다.
    • Options - Out. 현재 옵션 문자열을 받아들여 파싱된 쌍을 뺀 옵션 문자열을 출력합니다.
    • Result - Out. 파싱된 쌍을 출력합니다.
  • GetKeyValue [Pair] [Key] [Value] 키 값 구하기 - 키-값 쌍을 키와 값으로 분해합니다.
    • Pair - 키-값 쌍을 받습니다.
    • Key - Out. 키를 출력합니다.
    • Value - Out. 값을 출력합니다.
  • ParseOption [Options] [InKey] 파싱 옵션 - 주어진 키에 대한 옵션 문자열에서 키-값 쌍을 파싱해 냅니다. String 형태로 키-값 쌍을 반환합니다.
    • Options - 현재 옵션 문자열을 받습니다.
    • InKey - 찾을 키입니다.
  • HasOption [Options] [InKey] 옵션 있는지 - 주어진 키에 대한 키-값 쌍이 옵션 문자열에 있는지를 반환합니다.
    • Options - 현재 옵션 문자열을 받습니다.
    • InKey - 찾을 키입니다.
  • GetIntOption [Options] [ParseString] [CurrentValue] Int 옵션 구하기 - 옵션 문자열에서 주어진 키에 대한 Int 값을 반환합니다.
    • Options - 현재 옵션 문자열을 받습니다.
    • ParseString - 찾을 키입니다.
    • CurrentValue - 키를 찾지 못한 경우 사용할 현재, 또는 디폴트 값입니다.

Mutator 뮤테이터

  • AddMutator [mutname] [bUserAdded] 뮤테이터 추가 - 지정된 뮤테이터를 게임에 추가합니다.
    • mutname - 추가시킬 뮤테이터 클래스를 나타내는 String 입니다.
    • bUserAdded - 참이면 뮤테이터는 게임의 인터페이스를 통해 플레이어 옆에 추가됩니다.
  • RemoveMutator [MutatorToRemove] - 주어진 뮤테이터를 게임에서 제거합니다.
    • MutatorToRemove - 제거할 Mutator 입니다.
  • AllowMutator [MutatorClassName] 뮤테이터 허용 - 주어진 Mutator 클래스를 게임에 추가시킬 수 있는지를 반환합니다.
    • MutatoClassName - 검사할 뮤테이터 클래스를 나타내는 String 입니다.
  • Mutate [MutateString] [Sender] 뮤테이트 - 입력 문자열을 뮤테이터 목록에 전달합니다. PlayerController.Mutate() 에 의해 사용되는데, (mutate xxx 를 키로 바인딩하여) 뮤테이터가 인풋 실행 함수를 갖도록 하는 의도입니다.
    • MutateString - 뮤테이터 목록에 전달할 String 입니다.
    • Sender - 뮤테이트 문자열을 전달하는 플레이어의 PlayerController 입니다.
  • CheckRelevance [Other] 관련성 검사 - 액터가 이 게임에 관련되어 소멸되지 않아야 한다면 참을 반환합니다. Actor::PreBeginPlay() 에서 호출되며, 뮤테이터가 스폰되는 액터를 제거하거나 대체할 수 있게 하려는 의도입니다.
    • Other - 관련성 검사를 할 Actor 입니다.
  • ModifyScoreKill [Killer] [Other] 점수 킬 변경 - 점수획득 처리할 뮤테이터 목록에 플레이어 킬을 전달합니다.
    • Killer - 플레이어의 죽음을 유발한 플레이어의 Controller 입니다.
    • Other - 죽은 플레이어의 Controller 입니다.
  • DriverEnteredVehicle [V] [P] 탈것에 운전사 탑승 - 뮤테이터 목록에 vehicle entered 이벤트를 전달합니다.
    • V - 탑승한 Vehicle 입니다.
    • P - 탈것에 탑승한 플레이어의 Pawn 입니다.
  • CanLeaveVehicle [V] [P] 탈것 내리기 가능? - 주어진 Pawn 이 지정된 Vehicle 을 벗어날 수 있는지를 검사합니다. 뮤테이터가 존재하면 뮤테이터 목록이 결정을 내릴 수 있도록 합니다.
    • V - 내리려는 Vehicle 입니다.
    • P - 탈것을 내리려는 플레이어의 Pawn 입니다.
  • DriverLeftVehicle [V] [P] 운전사 탈것 내림 - 뮤테이터 목록에 vehicle exited 이벤트를 전달합니다.
    • V - 내리려는 Vehicle 입니다.
    • P - 탈것을 내리려는 플레이어의 Pawn 입니다.

Cheat Detection 치트 검출

  • EnableStandbyCheatDetection [bIsEnabled] 스탠바이 치트 검출 활성화 - 스탠바이 검출을 끄고 켭니다.
    • bIsEnabled - 참이면 치트 검출은 켜지고, 아니면 꺼집니다.
  • StandbyCheatDetected [StandbyType] 스탠바이 치트 검출됨 - 게임 코드에 스탠바이 치트가 검출되었음을 알립니다.
    • StandbyType - 검출된 치트의 EStandbyType 입니다.

Automated Testing 자동화 테스팅

  • DoTravelTheWorld 월드로 트래블 수행 - 자동화 테스팅용 월드 트래블을 시작합니다.
  • IsAutomatedPerfTesting 자동화 성능 테스팅? - Automated Performance 테스팅이 활성화되었다면 참을 반환합니다.
  • IsCheckingForFragmentation 단편화 검사중? - 단편화 검사가 활성화되었다면 참을 반환합니다.
  • IsCheckingForMemLeaks 메모리 누수 검사중? - 메모리 누구 검사가 활성화되었다면 참을 반환합니다.
  • IsDoingASentinelRun 센티넬 런 수행중? - 센티넬 런 수행중이면 참을 반환합니다.
  • ShouldAutoContinueToNextRound 다음 판으로 자동 진행? - 다음 판으로 자동 진행해야 하면 참을 반환합니다.
  • CheckForSentinelRun 센티넬 런 검사 - 필요한 경우 AutoTestManager 에게 센티넬 런을 시작하도록 요구합니다. GameInfo 서브클래스에 의해 호출되어야 하며, GameInfo::StartMatch() 의 베이스 구현에서는 안됩니다.

게임 수명주기


게임의 수명주기, 즉 언제 게임타입이 생성되는지, 플레이어는 어떻게 생성되는지, 게임 종료 조건은 어떻게 검사하는지 등은 꼭 이해해야할 중요한 부분입니다. 특정 게임타입에 맞도록 엔진을 개조하는 데 도움이 될 것입니다. 엔진 스타트업에서부터 게임타입의 자체 수명주기에 이르기까지 전체 게임 흐름은 UnrealScript Game Flow KR 문서를 참고해 보시면 됩니다.

게임타입 접두사


언리얼 엔진 3 의 게임타입 시스템에는 맵 파일명에 주어진 접두사에 따라 맵에 사용할 GameInfo 클래스를 적절히 자동 선택하기 위한 메커니즘이 있습니다. DefaultMapPrefixesCustomMapPrefixes 배열은 (다른 것들 중) 한 게임타입 클래스에 특정 접두사 문자열을 매핑하는 GameTypePrefix 구조체 배열을 담습니다.

GameTypePrefix 구조체

  • Prefix 접두사 - 맵 접두사를 나타내는 String 입니다. 맵 접두사는 맵 이름으로 시작해서 하이픈(-)이 붙는 일정 순서의 문자입니다. 하이픈은 접두사에 포함되어 있지 않습니다. 단지 접두사를 나머지 맵 이름과 분리할 뿐입니다.
  • bUseCommonPackage 공용 패키지 사용? - 참이면 이 게임타입에 대한 공용 패키지가 생성되어야 합니다. 자세한 것은 공용 패키지 참고.
  • GameType 게임타입 - 접두사에 매핑할 게임타입의 클래스를 나타내는 String 입니다. URL 에 지정된 게임타입이 없을 경우 이 접두사를 가진 맵에 이 게임타입이 사용될 것입니다.
  • AdditionalGameTypes 부가 게임타입 - URL 을 통해 이 맵 접두사가 지원하는 부가 게임타입 클래스를 지정하는 String 배열입니다.
  • ForcedObjects 강제된 오브젝트 - 모든 맵에 쿠킹되는 것을 피하기 위해 공용 패키지에 들어가야 할 강제 오브젝트(와 클래스)입니다.

게임타입 접두사 추가하기

게임타입 접두사 매핑은 DefaultGame.ini 콘픽 파일의 [Engine.GameInfo] 부분에 새 항목을 만드는 식으로 추가됩니다. 예제는 다음과 같습니다:

[Engine.GameInfo]
+DefaultMapPrefixes=(Prefix="DM",bUsesCommonPackage=FALSE,GameType="UTGame.UTDeathmatch")

공용 패키지

TODO

일시정지


게임 일시정지는 GameInfo 에서 SetPause() 를 호출하여 이루어집니다. SetPause() 는 파라미터로써 이 배열에 추가되는 델리게이트를 받습니다. 게임이 어떤 이유로 일시정지되었을 때, 조건이 더이상 문제되지 않음을 확인하기 위한 특유의 델리게이트가 SetPause() 로 전달됩니다.

예를 들어 PlayerController.uc 에서 콘트롤러가 꽂히거나 뽑혔을 때, PlayerController 에서 SetPause() 를 호출하여 거기에 CanUnpauseControllerConnected 함수를 전달하며, 그리고서 그 함수는 GameInfoSetPause() 상으로 전달됩니다:

// 콘트롤러가 제거되었으면 pause, 아니면 unpause
SetPause(!bIsConnected,CanUnpauseControllerConnected);

CanUnpauseControllerConnected 함수는 단지 콘트롤러가 꽂혔는지 아닌지만을 반환합니다:

/** unpause 전에 콘트롤러가 연결되었는지 검사하기 위한 callback */ function bool CanUnpauseControllerConnected() { return bIsControllerConnected; }

GameInfo 안의 SetPause 함수로 전달된 델리게이트가 없는 경우, 항상 참을 반환하는 디폴트 CanUnpause 함수가 사용됩니다. 플레이어가 단순히 게임을 일시정지시키고자 하는 경우가 될 텐데, 게임을 재개시킬 때는 검사할 조건이 별달리 없기 때문입니다.

이후 ClearPause() 를 호출하여 게임을 재개시킬 때, Pausers 배열에 있는 각 델리게이트가 실행됩니다. 델리게이트가 참을 반환하면 배열에서 제거됩니다. 배열이 비어야만 게임이 재개될 것입니다.

뮤테이터


Mutator 란 게임플레이의 특정한 양상을 변경하기 위해 게임에 적용할 수 있는 특수 액터를 말합니다. 뮤테이터가 할 수 있는 일을 예로 들자면:

  • 플레이어의 로그인 파라미터 변경
  • 플레이어의 폰 프로퍼티 변경
  • (bGameRelevant=TRUE 가 아닌) 하나 또는 모든 액터를 변경, 제거, 대체
  • 플레이어 시작 위치 덮어쓰기
  • 게임 종료 조건 변경

위 항목은 단지 뮤테이터가 변경할 수 있는 게임의 일면에 불과합니다.

뮤테이터 추가하기

뮤테이터는 GameInfoAddMutator() 함수를 통해 게임에 추가됩니다. 게임플레이 이벤트에 반응하여 특정한 면을 변경하기 위해 플레이 도중 동적으로 뮤테이터를 추가시킬 수 있도록 하기 위해, 잠재적으로 다른 액터에서도 호출 가능합니다. 디폴트로 이는 맵 URL에 지정된 뮤테이터는 무엇이고 추가하기 위해 InitGame() 에서 호출됩니다.

맵 URL 에 뮤테이터 지정은 Mutator= 에다 추가시킬 뮤테이터 목록을 각각 쉼표로 분리하여 넣어주면 됩니다. 예를 들어:

MapName?Game=GameName?Mutator=BigHeads,Instagib

이 맵 URL 은 GameName 게임타입을 사용하여 MapName 맵을 로드한 다음 BigHeadsInstagib 뮤테이터를 추가합니다. 이런 식으로 뮤테이터를 추가하는 맵 URL은 보통 플레이어가 사용할 뮤테이터를 선택할 수 있도록 메뉴에 의해 동적으로 생성됩니다. 게임타입에 대한 InitGame() 이벤트 안에 그 뮤테이터에 대한 명시적 AddMutator() 호출을 추가하여 특정 게임타입에 하나 이상의 "디폴트" 뮤테이터를 하드코딩할 수도 있습니다.