목차

StatVisualizer?

UDN Links

Related code files

Pre-Setting for using GameStatVisualizer

1. 우선 DefaultGame.ini에 다음 내용을 추가하여야 한다.
// 게임 클래스의 설정 내용에 아래 설정 추가.
 
// UDN에 보면 GameplayEventsWriterClassName이 "UTGameplayEventsWriter"로 되어 있는데, 이 클래스가 현재 없다.
GameplayEventsWriterClassName="Engine.GameplayEventsWriter"
bLogGameplayEvent=true
2. 그 뒤 DefaultEditor.ini에 GameStatsBrowser를 위한 설정을 해야 한다.
// 기본적으로 GameStatsBrowser 설정이 되어 있다.
// 여기에서 다음 부분들을 바꾸어 주어야 한다.
RemoteConnectionIp="XXX.XXX.XXX.XXX" // <<- 이 녀석을 실제 머신의 ip로 지정한다.
 
// 아래 두 설정 중 바꾸어주어야 하는 부분은 Data Source 부분이다.
// Data Source의 값을 실제 머신의 Host name으로 지정해 주어야 한다.
ConnectionString="~~~~~~~~~~~~~~~"
RemoteConnectionStringOverride="~~~~~~~~~~~~~~~"

3. 마지막으로, Match가 시작되기 전 GameStatsWriter 인스턴스를 생성해야 한다.

// Gameplay statistics 변수들
var config string GameplayEventsWriterClassName;    // 사용될 클래스명
var config bool bLogGameplayEvents;    // 이벤트 로깅을 할 것인가?
var transient GameplayEventsWriter GameplayEventsWriter;    // 통계수집 클래스 인스턴스
 
// 원하는 GameInfo subclass에서 PostBeginPlay() 함수에 다음과 같이 인스턴스 생성 코드를 삽입한다.
function PostBeginPlay()
{
    local class<GameplayEventsWriter> GameplayEventsWriterClass;
 
    if ( bLogGamePlayEvents && GameplayEventsWriterClassName != "" )
    {
        GameplayEventsWriterClass = class<GameplayEventsWriter>(FindObject(GameplayEventsWriterClassName, class'Class'));
        if ( GameplayEventsWriterClass != None )
        {
            GameplayEventsWriter = new(self) GameplayEventsWriterClass;
            if ( GameplayEventsWriter != None )
            {
                // Do something...
            }
            else
            {
                // Do something...
            }
        }
    }
}

How to write GameplayEvents

function StartMatch()
{
    if ( GameplayEventsWriter != None && !GameplayEventsWriter.IsSessionInProgress() && !class'WorldInfo'.static.IsMenuLevel() )
    {
        // Parameter는 HeartBeating 주기이다. 단위는 초 단위.
        // 특정 주기로 반복해서 기록해야 하는 이벤트를 위한 "Poll" timer를 HeartBeatDelta 주기로 생성시킨다.
        // 예를 들어, 플레이어들의 location 정보 수집 등에 사용될 수 있겠다.
        GameplayEventsWriter.StartLogging(0.5f);
    }
    ...
}
 
// EndLogging은 게임이 종료되는 곳에 넣어주면 된다.
// ex) function EndGame

How to visualize GameplayEvents

TODO & 활용도