Unreal SDK 설정
FirstLook Unreal SDK는 Unreal Engine 플러그인으로, Unreal 게임에서 FirstLook과 연동할 수 있게 해줍니다. 이 플러그인은 현재 Steam 로그인, 인게임 설문조사, 세션 추적, 커스텀 이벤트, 커스텀 지속 시간 이벤트, 플레이어 조회, PlayFab ID 연결, 권한 부여(entitlements), 플레이테스트 워터마킹을 지원합니다.
FirstLook SDK의 주요 접근 지점은 UFirstLookSubsystem으로, FirstLook과 상호작용하는 데 사용되는 다양한 메서드와 델리게이트를 제공합니다.
이 설정 가이드에서는 MyGame이라는 이름의 Unreal 게임 프로젝트가 있다고 가정합니다.
사전 요구사항
섹션 제목: “사전 요구사항”관리자 대시보드에서 FirstLookSDK를 다운로드합니다.

- Unreal SDK 설정 파일을 생성합니다.

- FirstLook에서 Steam 게임을 설정합니다. Steam 연동을 참조하세요.
Steam 계정이 연결된 테스트 플레이어를 플레이테스트에 초대합니다. 플레이어 초대를 참조하세요.
Unreal에 FirstLookSDK 플러그인 설치하기
섹션 제목: “Unreal에 FirstLookSDK 플러그인 설치하기”FirstLookSDK를 다운로드하고 FirstLook에 게임을 설정했다면, Unreal 프로젝트에 플러그인을 설치할 수 있습니다.
FirstLookSDK플러그인을MyGame/Plugins/FirstLookSDK로 이동합니다.MyGame/Plugins디렉터리가 없다면 새로 생성합니다.MyGame.uproject파일에FirstLookSDK플러그인을 등록합니다."Plugins": [{"Name": "FirstLookSDK","Enabled": true}]MyGame.Build.cs파일에FirstLookSDK플러그인을 의존성으로 추가합니다.PrivateDependencyModuleNames.AddRange(new string[] {"FirstLookSDK"});Unreal Editor에서 아래 경로를 통해
FirstLookSDK플러그인의FirstLookApiURL,FirstLookClientURL,FirstLookGameSlug설정을 구성합니다:Edit > ProjectSettings > Plugins > FirstLook
또는
DefaultGame.ini파일에서 플러그인을 구성할 수 있습니다:[/Script/FirstLookSDK.FirstLookSDKSettings]FirstLookApiURL="https://api.firstlook.gg"FirstLookClientURL="https://<game-slug>.firstlook.gg"FirstLookGameSlug="<game-slug>"(
<game-slug>를 실제 FirstLook 게임 슬러그로 대체하세요)
클라이언트 URL은 FirstLook 설정에서 도메인을 확인하세요:

DefaultEngine.ini파일에서OnlineSubsystemSteam을 구성합니다.[OnlineSubsystem]DefaultPlatformService=Steam[OnlineSubsystemSteam]bEnabled=trueSteamDevAppId=<steam-app-id>(
<steam-app-id>를 실제 Steam 앱 ID로 대체하세요)SDK는 실행 중인 Steam 클라이언트에서 Steam 앱 ID를 읽으며, Steam을 사용할 수 없을 때만
SteamDevAppId를 대체값으로 사용합니다. 따라서 하나의 패키징된 빌드를 여러 Steam 앱 ID에 대해 배포할 수 있으며, 플레이어가 실제로 실행한 앱을 보고합니다.SteamDevAppId는OnlineSubsystemSteam이 초기화될 수 있도록 여전히 필요하며, 에디터에서는 이 값이 사용됩니다.Unreal
CommonUI를 설정합니다.이 가이드의 Step 1을 따라 기본
Game Viewport Client Class를CommonGameViewportClient로 설정합니다.
FirstLook Steam 로그인 테스트하기
섹션 제목: “FirstLook Steam 로그인 테스트하기”FirstLookSDK Unreal 플러그인이 올바르게 설정되었다면, FirstLook Steam 로그인은 FirstLook 서브시스템 초기화 시 자동으로 호출되므로 별도의 설정 없이 바로 동작합니다. 로컬에서 연동을 테스트하려면 몇 가지 단계를 거쳐야 합니다.
Unreal Editor에서 스탠드얼론 게임 모드의 로깅을 활성화합니다
Edit > Editor Preferences에서 아래 경로로 이동합니다:Level Editor > Play > Play in Standalone Game > Additional Launch Parameters-log를 실행 파라미터로 추가합니다

스탠드얼론 게임으로 플레이합니다
출력 로그에서
LogFirstLookSDK로그 카테고리에 로그인 성공을 나타내는 로그 라인이 보여야 합니다예:
LogFirstLookSDK: Verbose: Login succeeded.
인증 상태
섹션 제목: “인증 상태”서브시스템은 초기화되는 동안 한 번 인증을 수행합니다. Steam 티켓과 앱 ID가 있으면 Steam으로, 없으면 익명으로 인증합니다. 인증이 완료되기 전에 이루어진 호출은 큐에 추가되지 않습니다. SDK는 해당 호출을 건너뛰고 아래와 같은 경고 메시지를 한 번 기록합니다:
LogFirstLookSDK: Warning: FirstLook is not authenticated yet; <url> was skipped. Wait for OnFirstLookReady before calling the SDK.
건너뛴 호출은 보통 응답이 없으므로 델리게이트가 호출되지 않습니다. 일부 호출은 대신 즉시 응답하므로, 호출 전에 델리게이트를 바인딩해 두세요. 권한 부여(entitlement) 관련 호출은 401 및 Not authenticated로 실패 델리게이트를 발생시키고, PostEvent, GetFeedbackSurvey, GetTriggeredSurveys는 설문이 없음을 보고합니다.
인증에 실패하면 SDK는 이 세션의 모든 FirstLook API 호출이 건너뛰어진다고 기록하고 OnAuthenticationFailed를 발생시킵니다. 로그인 실패는 게임이 재시작될 때까지 지속됩니다.
OnFirstLookReady와 OnAuthenticationFailed는 네이티브 이벤트이므로 AddUObject 또는 AddLambda로 바인딩합니다. 각각 한 번만 발생하므로, 바인딩 전에 인증이 완료되었을 수 있어 먼저 IsAuthenticated()와 HasAuthenticationFailed()를 확인하세요.
void UMainMenu::NativeConstruct(){ Super::NativeConstruct();
if (UFirstLookSubsystem* FirstLook = GetOwningLocalPlayer()->GetSubsystem<UFirstLookSubsystem>()) { if (FirstLook->IsAuthenticated()) { HandleFirstLookReady(); } else if (FirstLook->HasAuthenticationFailed()) { HandleFirstLookFailed(); } else { FirstLook->OnFirstLookReady.AddUObject(this, &UMainMenu::HandleFirstLookReady); FirstLook->OnAuthenticationFailed.AddUObject(this, &UMainMenu::HandleFirstLookFailed); } }}FirstLook 노드 호출 전에 Is Authenticated를 호출하고, Has Authentication Failed로 “아직 인증되지 않음”과 “이 세션에서 인증 실패”를 구분합니다. ready 및 failed 이벤트는 C++ 전용입니다.
인게임 설문조사 테스트하기
섹션 제목: “인게임 설문조사 테스트하기”FirstLook에 성공적으로 로그인했다면, FirstLook 서브시스템을 사용하여 인게임 설문조사를 트리거할 수 있습니다.
게임 클라이언트 배포가 활성화된 설문조사를 생성합니다. 설문조사 생성을 참조하세요.
새로 생성한 설문조사의 트리거를 설정합니다. 트리거 설정을 참조하세요.
Unreal에서 설문조사 델리게이트를 등록합니다:
UFirstLookSubsystem::OnNewNativeSurveyAvailable:이 델리게이트가 호출될 때
WBP_Survey_Screen위젯이 표시되어야 합니다. 이 위젯은 다음 경로에서 찾을 수 있습니다:MyGame/Plugins/FirstLookSDK/Content/UI_Survey/Widgets/WBP_Survey_Screen.uasset
UFirstLookSubsystem::OnNewBrowserSurveyAvailable:기본적으로
UFirstLookSubsystem::ActivateSurveyBrowserOverlay를 사용하여 Steam 브라우저 오버레이를 표시하도록 연결되어 있습니다
설문조사에 대해 생성한 트리거와 함께
UFirstLookSubsystem::PostEvent를 호출합니다. 트리거 조건이 충족되면, 구성된 설문조사 배포 채널에 따라 이전 단계에서 설정한 델리게이트 중 하나가 트리거됩니다.
세션 및 이벤트
섹션 제목: “세션 및 이벤트”세션 추적
섹션 제목: “세션 추적”FirstLook SDK는 별도의 코드 없이 플레이어 세션을 자동으로 추적합니다. 세션은 UFirstLookSubsystem이 초기화될 때 시작되고, 게임 클라이언트가 정상적으로 종료될 때 끝납니다. FirstLook 계정을 아직 생성하지 않은 플레이어도 추적되며, 로그인된 경우 Steam 계정이 연결된 상태로 대시보드에서 미연결 플레이어로 표시됩니다.
세션이 기록되기 시작하면 Retention 탭 아래 Analytics 페이지와 각 개별 플레이어 프로필에서 플레이어 활동 및 세션 지속 시간 데이터를 확인할 수 있습니다.
커스텀 이벤트
섹션 제목: “커스텀 이벤트”자동 세션 추적 외에도, 스튜디오에서 가장 중요한 게임플레이 이벤트를 직접 계측할 수 있습니다 — 영웅 선택, 매치 결과, 상점 구매 등. UFirstLookSubsystem의 PostCounterEvent 메서드를 사용하여 정수 값과 함께 이름이 지정된 카운터를 전송하세요:
UCLASS()class FIRSTLOOKSDK_API UFirstLookSubsystem : public ULocalPlayerSubsystem{public: // ... UFUNCTION(BlueprintCallable, Category = FirstLook) void PostCounterEvent(FString CounterName, int32 Count);
UFUNCTION(BlueprintCallable, Category = FirstLook) void PostCounterEventWithParam(FString CounterName, FString Param, int32 Count); // ...}아래는 UCommonActivatableWidget에서 카운터 이벤트를 전송하는 예시입니다. 이 경우 플레이어가 장비 화면에서 영웅을 선택했음을 기록합니다:
void UMainMenu::HandleSendCounterEventClicked(){ if (ULocalPlayer* OwningLocalPlayer = GetOwningLocalPlayer(); OwningLocalPlayer != nullptr) { if (UFirstLookSubsystem* FirstLookSubsystem = OwningLocalPlayer->GetSubsystem<UFirstLookSubsystem>()) { FirstLookSubsystem->PostCounterEvent("loadout.hero-a-selected", 1); } }}이벤트 이름 지정 및 그룹화
섹션 제목: “이벤트 이름 지정 및 그룹화”이벤트 이름은 <category>.<event-type> 규칙을 따릅니다. 이 패턴을 사용하면 FirstLook이 관련 이벤트를 Analytics 페이지와 플레이어 프로필에서 자동으로 그룹화하여 카테고리별로 지표를 쉽게 탐색할 수 있게 합니다.
게임 내에서 이벤트가 발생하는 위치를 반영하는 카테고리 네임스페이스를 선택하세요 — 예를 들어 match, lobby, menu, store, in-game 등. 필요한 만큼 카테고리를 자유롭게 정의할 수 있습니다.
파라미터
섹션 제목: “파라미터”PostCounterEventWithParam을 사용하면 새 이벤트 이름을 정의하지 않고도 하나의 이벤트를 변형으로 분리할 수 있습니다 — 예를 들어 플레이어가 시작한 레벨이나 구매한 아이템 등. 동일한 함수가 Blueprint에서 Post Counter Event With Param 노드로도 사용 가능합니다.
void UGameplayHud::HandleLevelStarted(const FString& LevelId){ if (ULocalPlayer* OwningLocalPlayer = GetOwningLocalPlayer(); OwningLocalPlayer != nullptr) { if (UFirstLookSubsystem* FirstLookSubsystem = OwningLocalPlayer->GetSubsystem<UFirstLookSubsystem>()) { FirstLookSubsystem->PostCounterEventWithParam("level.started", LevelId, 1); } }}FirstLook은 변형을 level.started#forest_3으로 저장하고, Analytics 페이지의 기본 이벤트 아래에 차트로 표시하며, 모든 변형을 기본 합계로 합산합니다. 파라미터는 앞뒤 공백이 제거되고 소문자로 변환되며, 최대 64자까지 허용되고 #을 포함하면 안 됩니다. 빈 파라미터는 일반 이벤트를 전송하며, PostCounterEvent는 변경 없이 계속 작동합니다. 각 고유 파라미터가 별도의 변형으로 추적되므로 값의 종류는 적게 유지하세요.
커스텀 지속 시간 이벤트
섹션 제목: “커스텀 지속 시간 이벤트”카운터 이벤트는 무언가가 발생했음을 기록하지만, 때로는 얼마나 오래 걸렸는지 알아야 합니다. 지속 시간 이벤트를 사용하면 게임의 두 명시적 시점 사이의 경과 시간을 측정할 수 있습니다 — 매치, 로딩 화면, 메뉴에서 보낸 시간, 또는 추적하려는 다른 구간 등.
SDK는 UFirstLookSubsystem에 StartDurationEvent / EndDurationEvent 쌍을 제공합니다:
UCLASS()class FIRSTLOOKSDK_API UFirstLookSubsystem : public ULocalPlayerSubsystem{public: // ... UFUNCTION(BlueprintCallable, Category = FirstLook) void StartDurationEvent(FString DurationName);
UFUNCTION(BlueprintCallable, Category = FirstLook) void EndDurationEvent(FString DurationName); // ...}활동이 시작될 때 StartDurationEvent를 호출하고, 끝날 때 EndDurationEvent를 호출합니다. SDK가 타이밍과 전송을 처리하며, 이름만 제공하면 됩니다.
아래는 플레이어가 매치에서 보낸 시간을 추적하는 예시입니다. 매치가 시작될 때 StartDurationEvent가 호출되고, 끝날 때 EndDurationEvent가 호출됩니다:
void AMyGameMode::OnMatchStart(){ for (APlayerController* PC : GetWorld()->GetPlayerControllerIterator()) { if (ULocalPlayer* LP = PC->GetLocalPlayer()) { if (UFirstLookSubsystem* FirstLook = LP->GetSubsystem<UFirstLookSubsystem>()) { FirstLook->StartDurationEvent("match.round"); } } }}
void AMyGameMode::OnMatchEnd(){ for (APlayerController* PC : GetWorld()->GetPlayerControllerIterator()) { if (ULocalPlayer* LP = PC->GetLocalPlayer()) { if (UFirstLookSubsystem* FirstLook = LP->GetSubsystem<UFirstLookSubsystem>()) { FirstLook->EndDurationEvent("match.round"); } } }}이벤트 이름 지정 및 그룹화
섹션 제목: “이벤트 이름 지정 및 그룹화”지속 시간 이벤트 이름은 카운터 이벤트와 동일한 <category>.<event-type> 규칙을 따릅니다. FirstLook은 Analytics 페이지에서 카테고리 접두사로 자동 그룹화합니다.
빌드 버전
섹션 제목: “빌드 버전”세션, 카운터 이벤트, 지속 시간 이벤트는 각각 build_version을 기록합니다. FirstLook은 이를 불투명한 텍스트로 저장하므로, 형식은 전적으로 스튜디오의 선택입니다: 시맨틱 버전, CI 빌드 번호, 브랜치+커밋 문자열 등. 하나의 규칙을 선택하고 일관되게 유지하세요. 플레이어 필터의 빌드 필터는 정확한 값을 기준으로 일치시킵니다.
기본적으로 SDK는 프로젝트 버전을 읽으므로 별도의 설정이 필요하지 않습니다. UFirstLookSubsystem은 시작 시 [/Script/EngineSettings.GeneralProjectSettings]에서 ProjectVersion을 읽으며, 이는 Project Settings > Project > Description > Version에서 설정한 값입니다.
직접 값을 제공하려면 OverrideBuildVersion을 호출하세요 (Blueprint 및 C++에서 사용 가능):
FirstLook->OverrideBuildVersion(TEXT("1.4.2"));플레이어
섹션 제목: “플레이어”현재 플레이어
섹션 제목: “현재 플레이어”GetCurrentPlayer를 호출하고 OnCurrentPlayerAvailable을 바인딩하여 인증된 플레이어의 FirstLook 레코드를 읽을 수 있습니다 — 예를 들어 클레임 프롬프트를 표시할지 결정하는 데 활용합니다.
void UMainMenu::RefreshPlayer(){ UFirstLookSubsystem* FirstLook = GetOwningLocalPlayer()->GetSubsystem<UFirstLookSubsystem>(); FirstLook->OnCurrentPlayerAvailable.AddUniqueDynamic(this, &UMainMenu::HandleCurrentPlayer); FirstLook->GetCurrentPlayer();}
// AddDynamic이 요구하므로 UFUNCTION으로 선언합니다.void UMainMenu::HandleCurrentPlayer(const FFirstLookCurrentPlayerResponse& CurrentPlayer){ if (CurrentPlayer.player.IsUnlinked()) { GetOwningLocalPlayer()->GetSubsystem<UFirstLookSubsystem>()->GetPlayerClaim(); }}On Current Player Available를 바인딩한 후 Get Current Player를 호출합니다. 결과를 분해하여 Player > State를 unlinked와 비교합니다. IsUnlinked() 및 IsLinked() 헬퍼는 C++ 전용입니다.
FFirstLookCurrentPlayerResponse는 player (id, state), steam (steam_id, Steam 계정이 연결되지 않은 경우 빈 값), discord (discord_id), role (id, name)을 포함합니다. state는 소문자 문자열로 된 플레이어의 상태입니다.
OnCurrentPlayerAvailable은 성공 시에만 발생합니다. 실패는 GetCurrentPlayer failed: ...로 기록됩니다.
미연결 플레이어 온보딩
섹션 제목: “미연결 플레이어 온보딩”SDK는 새 플레이어를 미연결 상태로 생성합니다. 이러한 플레이어에게 계정을 클레임하고 프로필을 완성하는 온보딩 링크를 제공할 수 있으며, 이를 통해 이메일, 보상, Discord, 친구 초대 등 해당 역할이 제공하는 모든 기능을 잠금 해제할 수 있습니다.
From Game 플로우
섹션 제목: “From Game 플로우”미연결 플레이어를 온보딩하려면 먼저 대시보드에서 From Game 플로우를 구성합니다.
- SDK 구성 페이지에서 Unlinked Claiming 토글을 활성화합니다.
- From Game 플로우의 Claim, Onboarding, Complete 단계를 구성합니다.
- 선택 사항 - role을 구성합니다.
클레임 링크 제공
섹션 제목: “클레임 링크 제공”From Game 플로우 설정이 완료되면, 게임 클라이언트에서 SDK 메서드 **UFirstLookSubsystem::GetPlayerClaim**을 호출하고 OnPlayerClaimAndCodeAvailable 델리게이트에 바인딩할 수 있습니다. 델리게이트가 트리거되면 URL과 Base64로 인코딩된 QR 코드가 제공됩니다. 이 링크나 QR 코드를 플레이어에게 제시하여 이메일 인증 및 From Game 플로우에 구성된 온보딩 단계를 완료할 수 있도록 합니다.
외부 ID 연결
섹션 제목: “외부 ID 연결”인증이 완료된 후, 제공자 이름과 해당 서비스에서 플레이어의 ID를 LinkIdentity로 호출하여 FirstLook이 두 레코드를 매칭할 수 있도록 합니다. 현재 PlayFab만 지원되는 제공자입니다:
FirstLook->LinkIdentity(TEXT("playfab"), PlayFabId);LinkIdentity는 결과를 로그에만 보고합니다. 연결 실패 시 이유와 함께 Failed to link identity playfab (response code ...)로 기록됩니다: 게임에서 연결이 활성화되지 않은 경우 403 (FirstLook에 문의), ID가 다른 플레이어에 속한 경우 409, 빈 값이거나 64자를 초과하는 경우 422. 플레이어 자신의 ID를 다시 연결하면 성공하므로, 매 시작 시마다 호출해도 안전합니다.
권한 부여(Entitlements)
섹션 제목: “권한 부여(Entitlements)”권한 부여(Entitlements)는 FirstLook에서 플레이어에게 부여하는 인게임 아이템입니다. SDK는 FirstLook 유형의 권한 부여를 제공합니다: 대시보드의 Entitlements에서 권한 부여를 생성한 후, 예를 들어 Grant Entitlement 일괄 작업으로 플레이어에게 부여합니다. 게임은 플레이어의 미처리 권한 부여를 가져와서 아이템을 부여하고, 각 권한 부여를 사용(redeem)하여 다시 제공되지 않도록 합니다. Pragma 권한 부여는 Pragma를 통해 제공되며 여기에는 표시되지 않습니다. 대시보드에 Entitlements가 표시되지 않으면 FirstLook에 문의하여 활성화하세요.
| 호출 | 성공 | 실패 |
|---|---|---|
GetEntitlements() | OnEntitlementsAvailable(Entitlements), 없을 경우 빈 배열 | OnEntitlementsRequestFailed(StatusCode, Error) |
RedeemEntitlement(EntitlementId) | OnEntitlementRedeemed(EntitlementId, RedeemedAt) | OnEntitlementRedeemFailed(EntitlementId, StatusCode, Error) |
void UInventoryWidget::NativeConstruct(){ Super::NativeConstruct();
if (UFirstLookSubsystem* FirstLook = GetOwningLocalPlayer()->GetSubsystem<UFirstLookSubsystem>()) { FirstLook->OnEntitlementsAvailable.AddDynamic(this, &UInventoryWidget::HandleEntitlements); FirstLook->GetEntitlements(); }}
void UInventoryWidget::HandleEntitlements(const TArray<FFirstLookEntitlement>& Entitlements){ UFirstLookSubsystem* FirstLook = GetOwningLocalPlayer()->GetSubsystem<UFirstLookSubsystem>(); for (const FFirstLookEntitlement& Entitlement : Entitlements) { // 재시도 시 아이템이 한 번만 부여되도록 Entitlement.id를 키로 사용합니다. GrantItemOnce(Entitlement.id, Entitlement.sku); FirstLook->RedeemEntitlement(Entitlement.id); }}On Entitlements Available을 바인딩한 후 Get Entitlements를 호출합니다. 배열을 순회하며 Sku로 각 아이템을 한 번씩 부여하고, Id와 함께 Redeem Entitlement를 호출합니다. 실패를 감지하려면 On Entitlement Redeem Failed를 바인딩합니다.
각 FFirstLookEntitlement는 id, entitlement_type, name, sku, redeemable_type_id, created_at을 포함합니다. 아이템은 대시보드에서 설정한 Entitlement ID인 sku로 매칭하고, 번역되거나 이름이 변경될 수 있는 표시 문자열인 name으로는 매칭하지 마세요.
사용(redeem)은 1회성입니다. 동일한 권한 부여를 다시 사용하면 400 및 Entitlement already redeemed로 실패하는데, 이는 보통 이전 시도가 성공했음을 의미하므로 완료된 것으로 처리하세요.
워터마크 오버레이
섹션 제목: “워터마크 오버레이”SDK는 플레이테스트 빌드에 워터마크를 적용할 수 있습니다. 각 세션은 고유한 코드를 받으며, SDK는 이를 화면 전체에 기울어진 형태로 타일링하여 천천히 이동시키고 중앙은 항상 덮여 있어 크롭으로 제거할 수 없습니다. 스크린샷이나 스트림이 유출되면 해당 코드로 어떤 플레이어의 어떤 세션에서 왔는지 추적할 수 있습니다.
- SDK 구성 페이지의 Playtest Watermark 아래에서 Enable Watermark를 켜고 Save Changes를 클릭합니다.
- 세션이 시작된 후 SDK는 세션 코드를 가져와 첫 번째 로컬 플레이어의 뷰포트에 오버레이를 자동으로 그립니다.
- 유출을 추적하려면 Search watermark 페이지에서 코드를 입력하여 해당 플레이어와 세션을 찾습니다.
FirstLook은 워터마크 활성화 여부만 제어합니다. 외관은 프로젝트의 Edit > Project Settings > Plugins > FirstLook 아래 Watermark 섹션 또는 DefaultGame.ini에서 설정합니다:
[/Script/FirstLookSDK.FirstLookSDKSettings]WatermarkOpacity=0.18WatermarkTileDensity=5.0WatermarkAngleDegrees=30.0WatermarkDriftSpeed=0.5bWatermarkIncludeCenter=True| 설정 | 기본값 | 범위 | 효과 |
|---|---|---|---|
WatermarkColor | White | 텍스트 색상 | |
WatermarkOpacity | 0.18 | 0 ~ 1 | 텍스트 불투명도 |
WatermarkTileDensity | 5.0 | 1 ~ 12 | 화면 너비에 걸쳐 표시되는 코드의 대략적인 수 |
WatermarkAngleDegrees | 30.0 | 0 ~ 90 | 그리드 기울기 |
WatermarkDriftSpeed | 0.5 | 0 ~ 2 | 0이면 그리드가 고정됨 |
bWatermarkIncludeCenter | true | 화면 중앙이 덮혀 있도록 유지 |
OnWatermarkEnabled는 오버레이가 표시될 때 세션당 한 번 발생하며 코드를 전달합니다. 오버레이 자체가 렌더링을 처리하므로, 플레이어에게 세션이 워터마킹되었음을 알리고 싶을 때만 바인딩하세요. Blueprint에서는 On Watermark Enabled로 사용 가능합니다.
게임에 워터마킹이 활성화되지 않은 경우, SDK는 Watermark: watermarking is not enabled for this game. Contact FirstLook to enable it.을 기록하고 오버레이 없이 게임이 실행됩니다. 일시적인 가져오기 실패는 재시도되며, 계속 실패하더라도 게임은 오버레이 없이 실행됩니다.