Unreal용 6labs SDK

이 가이드에서는 6labs SDK를 Unreal Engine 게임에 통합하는 방법을 다룹니다. 플러그인 설치, 게임플레이 관찰 시작과 제어, 게임 이벤트 전송까지 설명합니다.

지원 플랫폼

6labs Unreal SDK가 현재 지원하는 플랫폼은 다음과 같습니다.

  • Windows 11(DirectX 12)

사전 요구 사항

6labs SDK를 통합하기 전에 개발 환경과 프로젝트가 다음 요구 사항을 충족하는지 확인하세요:

  • Unreal Engine 5.7 — 모든 5.7.x 릴리스.
    • 프로젝트가 5.6.x 또는 5.8.x 등 다른 엔진 버전을 사용하는 경우 6labs 지원팀에 문의하세요.

1. 모듈 다운로드 및 가져오기

6labs SDK는 Unreal Engine 플러그인 형태로 제공됩니다.

이 모듈을 Unreal 프로젝트에 추가합니다:

  1. 다운로드 6labs Unreal SDK 최신 버전 v2.3.5.
  2. 플러그인을 프로젝트의 Plugins 디렉터리(YourProject/Plugins/SixLabsSDK/)에 압축 해제합니다.
  3. 플러그인이 활성화되어 있는지 확인합니다:
    • Unreal Editor에서 Edit > Plugins 로 이동합니다.
    • “6labs SDK”를 검색하고 활성화되어 있는지 확인합니다.
  4. 모듈 종속성을 추가합니다
    • 게임 모듈의 Build.cs에 다음을 추가합니다: PublicDependencyModuleNames.Add("SixLabsSDK");

2. 게임플레이 관찰 시작

StartSession() 메서드를 사용하여 게임플레이 관찰을 시작합니다. 아래 예시를 참고하세요.

// MyGameInstance.h
UFUNCTION()
void OnStartSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage);

// MyGameInstance.cpp
#include "SixLabsSubsystem.h"
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
    FSixLabsLifecycleComplete OnComplete;
    OnComplete.BindDynamic(this, &UMyGameInstance::OnStartSessionComplete);
    
    SixLabs->StartSession(TEXT("<player_in_game_id>"), TEXT("<developer_payload>"), OnComplete);
}

void UMyGameInstance::OnStartSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage)
{
    // Response == ESixLabsSdkResponse::SIXLABS_SUCCESS이면 StartSession()이 성공적으로 완료된 것입니다
    // 결과 처리
    // SixLabs->GetSdkState()로 SDK의 현재 상태를 확인할 수 있습니다
}

중요 안내

  • InGameId가 전달되지 않으면 관찰된 세션이 폐기될 수 있으며 AI 분석에 사용되지 않습니다. 이 값이 없으면 세션을 플레이어에게 귀속시킬 수 없으며, 이는 후속 인사이트 생성에 필요합니다.
  • 게임플레이 관찰을 시작하기 전에 반드시 사용자 동의를 확보해야 합니다. SDK는 자동으로 권한을 요청하지 않으므로, 동의 처리는 게임 로직에서 직접 구현해야 합니다.
  • 권장되는 모범 사례로, 게임의 EULA(최종 사용자 라이선스 계약) 또는 개인정보 처리방침에 게임플레이 관찰에 대한 내용을 명시하는 것이 좋습니다.
  • 올바르게 테스트하려면 플랫폼별 빌드를 생성한 후 실제 디바이스에서 실행해야 합니다. Play-In-Editor 세션에서는 StartSession()이 대신 SIXLABS_ERROR_NOT_SUPPORTED와 함께 OnComplete를 호출합니다.
  • 참고로 모든 SDK 메서드는 블루프린트에서도 호출할 수 있습니다.
참고StartSession()필요 조건: SDK_STATE_IDLE
void StartSession(
    const FString& InGameId,
    const FString& DeveloperPayload,
    const FSixLabsLifecycleComplete& OnComplete);

파라미터

파라미터 타입 필수 여부 설명
InGameId FString 아니요 선택적이지만 권장되는 사용자 식별자입니다. 생략하면 세션이 폐기될 수 있으며 AI 분석에 사용되지 않습니다.
DeveloperPayload FString 아니요 세션과 연관된 선택적 개발자 정의 메타데이터입니다. 이 값은 세션 요청과 함께 원본 그대로 전달되며, 사용자 정의 추적 정보나 컨텍스트 정보를 첨부하는 데 사용할 수 있습니다. 더 풍부한 DeveloperPayload를 제공하면 AI 기반 분석 및 세션 이해의 품질을 크게 향상시킬 수 있습니다. 자세한 사용 사례와 JSON 예시는 개발자 페이로드 예시 페이지를 참고하세요.
예시:
  • 사용자 유입 채널
  • 캠페인 ID
  • 사용자 세그먼트 (예: 신규 사용자, 복귀 사용자, 고가치 사용자)
  • A/B 테스트 변형 (예: variant_a, variant_b) — 사용자를 코호트로 나누고 6labs 대시보드에서 각 코호트의 게임플레이 지표를 비교하세요.
  • 내부 참조 식별자
OnComplete FSixLabsLifecycleComplete 예 호출이 성공하든 실패하든 완료되는 즉시 호출됩니다. 콜백 타입를 참고하세요. 블루프린트에서는 콜백 핀 연결이 선택 사항입니다.

콜백 응답

이 콜백은 비동기로 호출되며, Response와 ErrorMessage를 통해 결과를 제공합니다.

응답값 설명
SIXLABS_SUCCESS 세션이 성공적으로 시작되었습니다.
SIXLABS_ERROR_STATE_NOT_IDLE SDK가 SDK_STATE_IDLE 상태가 아니었습니다 — 이미 세션이 실행 중이거나 일시 중지되었거나, 이전 세션이 아직 종료 중인 경우입니다. 세션을 이어가려면 ResumeSession()을 호출하세요.
SIXLABS_ERROR_NOT_SUPPORTED 게임플레이 관찰이 지원되지 않는 플랫폼(예: Play-In-Editor 세션)에서 StartSession()이 호출되었습니다.
SIXLABS_ERROR_SESSION_FAILED 요청은 수락되었지만 관찰 세션을 시작하지 못했고, SDK는 SDK_STATE_IDLE 상태로 돌아갔습니다. 이는 세션 생성 실패, 디바이스 성능 제한, 오래된 SDK 버전, 네트워크 문제, 또는 기타 초기화 오류로 인해 발생할 수 있습니다.

3. 인게임 ID 설정

SetInGameId() 메서드를 사용하여 플레이어의 인게임 ID를 기존 관찰 세션에 연결합니다. 이 메서드는 사용자 계정이 생성되기 전에 SDK가 초기화된 경우, 로그인한 사용자를 이미 진행 중인 세션에 연결할 때 주로 사용됩니다.

if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
    SixLabs->SetInGameId(TEXT("<player_in_game_id>"));
}

참고

  • StartSession() 호출 시 InGameId를 전달한 경우, SetInGameId()를 호출하면 현재 세션에 설정된 기존 값이 덮어씌워집니다.
참고SetInGameId()
void SetInGameId(const FString& InGameId);

파라미터

파라미터 타입 필수 여부 설명
InGameId FString 예 현재 세션에 연결할 플레이어의 인게임 식별자입니다.

4. 게임 이벤트 전송

SendGameEvent() 메서드를 사용하여 진행 중인 관찰 세션에서 사용자 지정 게임플레이 이벤트를 기록할 수 있습니다. 이벤트는 세션에 첨부되며, 분석 시 특정 게임플레이 순간과 연관 짓는 데 사용할 수 있습니다.

const bool bAccepted = SixLabs->SendGameEvent(TEXT("<event_name>"), TEXT("<event_data_as_json>"));
if (!bAccepted)
{
    // 이벤트가 전송되지 않았습니다. 아래 조건을 참조하세요
}
참고SendGameEvent()
bool SendGameEvent(
    const FString& EventName,
    const FString& EventDataJson);

파라미터

파라미터 타입 필수 여부 설명
EventName FString 예 기록할 사용자 지정 이벤트의 이름입니다.
EventDataJson FString 예 이벤트와 관련된 추가 데이터를 담은 JSON 인코딩 문자열입니다.

반환 값

값 설명
true 이벤트가 수락되어 업로드 대기열에 추가되었습니다.
false 이벤트가 거부되었습니다. 예를 들어 EventName이 비어 있는 경우입니다.

5. 고급 제어

StartSession()은 새 세션에 대한 게임플레이 관찰을 시작합니다. 이후 필요에 따라 PauseSession(), ResumeSession(), StopSession()을 사용하여 해당 세션을 제어할 수 있습니다.

5.1 일시 중지 (PauseSession)

PauseSession() 메서드를 사용하여 게임플레이 관찰을 일시 중지합니다.

const ESixLabsSdkResponse Response = SixLabs->PauseSession();
if (Response != ESixLabsSdkResponse::SIXLABS_SUCCESS)
{
    // SDK가 관찰 중이 아니었습니다. 아래 응답을 참조하세요
}

중요 안내

  • 게임플레이 관찰을 일시 중지합니다.
  • 관찰을 재개하려면 이후에 다시 ResumeSession()을 호출할 수 있습니다.
참고PauseSession()필요 조건: SDK_STATE_CAPTURING
ESixLabsSdkResponse PauseSession();

반환 값

값 설명
SIXLABS_SUCCESS 호출이 수락되어 처리되었습니다.
SIXLABS_ERROR_STATE_NOT_CAPTURING SDK가 SDK_STATE_CAPTURING 상태가 아닐 때 반환됩니다 — 예를 들어 게임플레이 관찰이 진행 중이지 않거나, 세션이 이미 일시 중지되었거나, 이미 정지가 진행 중인 경우입니다. 전체 상태 및 응답 코드 목록은 세션 수명 주기를 참고하세요.

5.2 재개 (ResumeSession)

이전에 PauseSession()으로 일시 중지된 세션을 이어가려면 ResumeSession() 메서드를 사용합니다.

// MyGameInstance.h
UFUNCTION()
void OnResumeSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage);

// MyGameInstance.cpp
#include "SixLabsSubsystem.h"
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
    FSixLabsLifecycleComplete OnComplete;
    OnComplete.BindDynamic(this, &UMyGameInstance::OnResumeSessionComplete);
    
    SixLabs->ResumeSession(OnComplete);
}

void UMyGameInstance::OnResumeSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage)
{
    // Response == ESixLabsSdkResponse::SIXLABS_SUCCESS이면 ResumeSession()이 성공적으로 완료된 것입니다
    // 결과 처리
    // SixLabs->GetSdkState()로 SDK의 현재 상태를 확인할 수 있습니다
}
참고ResumeSession()필요 조건: SDK_STATE_PAUSED
void ResumeSession(const FSixLabsLifecycleComplete& OnComplete);

파라미터

파라미터 타입 필수 여부 설명
OnComplete FSixLabsLifecycleComplete 예 호출이 성공하든 실패하든 완료되는 즉시 호출됩니다. 콜백 타입를 참고하세요. 블루프린트에서는 콜백 핀 연결이 선택 사항입니다.

콜백 응답

이 콜백은 비동기로 호출되며, Response와 ErrorMessage를 통해 결과를 제공합니다.

응답값 설명
SIXLABS_SUCCESS 세션이 성공적으로 재개되었습니다.
SIXLABS_ERROR_STATE_NOT_PAUSED SDK가 SDK_STATE_PAUSED 상태가 아니었습니다 — 이어갈 일시 중지된 세션이 없는 경우입니다.
SIXLABS_ERROR_SESSION_FAILED 요청은 수락되었지만 일시 중지된 세션을 재개하지 못했고, SDK는 SDK_STATE_IDLE 상태로 돌아갔습니다. 이는 세션 또는 런타임 오류, 네트워크 문제, 또는 세션 재개를 방해하는 기타 오류로 인해 발생할 수 있습니다.

5.3 정지 (StopSession)

StopSession() 메서드를 사용하여 현재 세션을 완전히 종료합니다. PauseSession()과 달리, 정지된 세션은 ResumeSession()으로 이어갈 수 없습니다 — 새 세션을 시작하려면 다시 StartSession()을 호출해야 합니다.

// MyGameInstance.h
UFUNCTION()
void OnStopSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage);

// MyGameInstance.cpp
#include "SixLabsSubsystem.h"
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
    FSixLabsLifecycleComplete OnComplete;
    OnComplete.BindDynamic(this, &UMyGameInstance::OnStopSessionComplete);
    
    SixLabs->StopSession(OnComplete);
}

void UMyGameInstance::OnStopSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage)
{
    // Response == ESixLabsSdkResponse::SIXLABS_SUCCESS이면 StopSession()이 성공적으로 완료된 것입니다
    // 결과 처리
    // SixLabs->GetSdkState()로 SDK의 현재 상태를 확인할 수 있습니다
}
참고StopSession()필요 조건: SDK_STATE_CAPTURING / SDK_STATE_PAUSED
void StopSession(const FSixLabsLifecycleComplete& OnComplete);

파라미터

파라미터 타입 필수 여부 설명
OnComplete FSixLabsLifecycleComplete 예 호출이 성공하든 실패하든 완료되는 즉시 호출됩니다. 콜백 타입를 참고하세요. 블루프린트에서는 콜백 핀 연결이 선택 사항입니다.

콜백 응답

이 콜백은 비동기로 호출되며, Response와 ErrorMessage를 통해 결과를 제공합니다.

응답값 설명
SIXLABS_SUCCESS 호출이 수락되어 세션이 종료되었습니다.
SIXLABS_ERROR_STATE_NOT_CAPTURING SDK가 SDK_STATE_CAPTURING 또는 SDK_STATE_PAUSED 상태가 아니었습니다 — 정지할 활성 세션이나 일시 중지된 세션이 없는 경우입니다.

6. 세션 수명 주기

SDK는 다음 상태를 오갑니다. 호출할 수 있는 메서드와 그 결과는 현재 상태에 따라 달라집니다:

  • GetSdkState()를 사용하면 언제든 SDK의 현재 상태를 확인할 수 있으며, 반환 타입은 ESixLabsSdkState입니다.
  • StartSession(), PauseSession(), ResumeSession(), StopSession()은 유효한 SDK 상태에서만 호출할 수 있습니다. 유효하지 않은 상태에서 작업을 호출하면 오류가 반환됩니다.
  • PauseSession()은 ESixLabsSdkResponse를 직접 반환합니다. StartSession(), ResumeSession(), StopSession()은 OnComplete 콜백을 통해 결과를 반환합니다.
  • OnComplete 콜백은 게임 스레드에서 비동기적으로 호출됩니다.

6.1 콜백 타입

FSixLabsLifecycleComplete는 다음 두 개의 파라미터를 받는 다이내믹 델리게이트입니다:

파라미터 타입 설명
Response ESixLabsSdkResponse 호출 결과이며, 응답 코드 중 하나입니다.
ErrorMessage const FString& 성공 시 비어 있으며, 실패 시 그 이유를 설명합니다.

6.2 상태

상태 값 설명
SDK_STATE_IDLE 100 게임플레이를 관찰하고 있지 않은 상태입니다. 기본 상태이며, 세션이 종료되거나 시작에 실패하면 이 상태로 돌아갑니다.
SDK_STATE_CAPTURING 101 게임플레이를 활발히 관찰하고 있는 상태입니다. 활성 세션뿐 아니라 버퍼링, 업로드 등 백그라운드 처리 과정도 포함합니다.
SDK_STATE_STOPPING 102 세션이 정지되는 중입니다. SDK가 SDK_STATE_IDLE로 돌아가기 전에 남아 있는 처리를 마무리하고 있습니다.
SDK_STATE_PAUSED 103 세션이 일시 중지된 상태입니다. 게임플레이 관찰은 잠시 중단되었지만 세션은 계속 열려 있으며, 이전에 관찰된 데이터는 계속 업로드될 수 있습니다.

6.3 응답 코드

응답값 값 발생 메서드 대처 방법
SIXLABS_SUCCESS 0 모두 처리할 것이 없습니다 — 호출이 정상적으로 완료되었습니다. StopSession()의 경우 세션이 종료되었습니다.
SIXLABS_ERROR_STATE_NOT_IDLE 1 StartSession() 이미 세션이 실행 중이거나, 일시 중지되었거나, 아직 종료 중입니다. GetSdkState()를 확인하고, 일시 중지 상태라면 ResumeSession()을 호출하세요.
SIXLABS_ERROR_STATE_NOT_CAPTURING 2 PauseSession(), StopSession() SDK가 관찰 중이 아닙니다. 세션 없이도 실행될 수 있는 수명 주기 처리에서 호출된 경우라면 무시해도 됩니다. StopSession()은 일시 중지된 세션을 종료할 수도 있습니다.
SIXLABS_ERROR_NOT_SUPPORTED 3 StartSession() 이 환경에서는 게임플레이 관찰을 사용할 수 없습니다 — 현재는 Play-In-Editor 세션가 해당합니다. 재시도하지 말고 바로 반환하세요.
SIXLABS_ERROR_STATE_NOT_PAUSED 4 ResumeSession() SDK가 일시 중지 상태가 아닙니다. 상태가 SDK_STATE_IDLE이면 대신 StartSession()을 호출하세요.
SIXLABS_ERROR_SESSION_FAILED 5 StartSession(), ResumeSession() 요청은 접수되었지만 세션을 시작하지 못했고, SDK는 SDK_STATE_IDLE로 돌아갔습니다. 이 오류는 즉시 거부가 아니라 OnComplete를 통해 전달됩니다. ErrorMessage를 기록하고 적절한 시점에 다시 시도하세요. 주요 원인은 저사양 기기, 오래된 SDK 버전, 네트워크 문제입니다.
Text copied to clipboard
질문이 있으신가요? 다음 주소로 문의하세요. dev-support@6labs.ai