> For the complete documentation index, see [llms.txt](https://docs.ggwp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ggwp.com/jp/ggwp-client-sdk/gaido/unreal.md).

# Unreal

**初期設定**

SDK が音声をキャプチャできるようにする前に、次を呼び出して初期化する必要があります:

{% code overflow="wrap" %}

```csharp
FGGWPSDKModule& GgwpSDK = FModuleManager::Get().LoadModuleChecked<FGGWPSDKModule>(TEXT("GGWPSDK"));
GgwpResult Result = GgwpSDK.InitializeSDK("YOUR_CUSTOMER_ID");
```

{% endcode %}

初期化に成功したら、Code Auth（推奨）または静的キー認証（より簡単で設定が容易）のいずれかで認可してください。

**Vivox**

Unreal プラグインは自動設定を試みます。もし `VivoxCore` がプロジェクトの uproject ファイルに存在して有効になっている場合、GGWP プラグインは Vivox 固有のヘルパーをビルドします。必ず `VivoxCore` を `${project}.uproject` に含めて、Vivox の設定関数がビルドされるようにしてください。

できるだけ早い段階で GGWP SDK を初期化し、認可してください:

{% code overflow="wrap" %}

```csharp
FGGWPSDKModule& GgwpSDK = FModuleManager::Get().LoadModuleChecked(TEXT("GGWPSDK"));
GgwpResult InitResult = GgwpSDK.InitializeSDK("YOUR_CUSTOMER_ID");
```

{% endcode %}

その後、動的トークンを使用するか:

{% code overflow="wrap" %}

```csharp
GgwpSDK.GetAuthManager()->SubscribeAuthUpdates(
    FAuthUpdatesDelegate::FDelegate::CreateLambda([](const GGWP::AuthStatus& AuthStatus) {
			UE_LOG(LogTemp, Display, TEXT("認証ステータスは %d です"), AuthStatus.Status);
    })
);

// 認証を実行
FAuthCompletionDelegate AuthCompletion;
AuthCompletion.BindLambda([this, AuthPromise](GgwpResult Result) {
	UE_LOG(LogTemp, TEXT("認証完了ステータス: %d"), Result);
});

FString CorrectCode = FetchCode();
AuthManager->ExchangeAuthCode(CorrectCode, AuthCompletion);
```

{% endcode %}

または静的

{% code overflow="wrap" %}

```csharp
FAuthCompletionDelegate AuthCompletion;
AuthCompletion.BindLambda([this, AuthPromise](GgwpResult Result) {
	UE_LOG(LogTemp, TEXT("認証完了ステータス: %d"), Result);
});

AuthManager->SetStaticAuth("SomeKey", "SomeSigningKey", AuthCompletion);
```

{% endcode %}

ログインに成功したら、音声チャンクを SDK に送信し始めることができます:

{% code overflow="wrap" %}

```csharp
VivoxVoiceClient = &static_cast<FVivoxCoreModule *>(&FModuleManager::Get().LoadModuleChecked(TEXT("VivoxCore")))->VoiceClient();
auto DefaultConfig = VivoxConfig();

// これにより、キャプチャコールバックが自動的にバインドされます。
// Vivox に独自のコールバックをバインドする場合は、
// FGGWPSDKodule::VivoxBeforeCaptureAudioSent を `pf_on_audio_unit_before_capture_audio_sent` にバインドしてください。
GgwpResult ConfigBindResult = GgwpSDK->BindCaptureCallback(DefaultConfig);
VivoxVoiceClient->Initialize(DefaultConfig);
```

{% endcode %}

GGWPSDK 自体に組み込まれたログ機能を使うこともできます。これは `GGWPSDK` ロググループで出力されます。または、独自のデリゲートをバインドすることもできます:

{% code overflow="wrap" %}

```csharp
GgwpSDK->GetLogDelegate().AddStatic(&FMyVoiceChatModule::LogMessage);
```

{% endcode %}

これらのログメッセージは SDK の動作に関する非常に役立つ情報を伝えるため、強く推奨されます。次を使用できます `FGGWPLogMessage::StatusCode` を使って、コード内でこれらの状態に反応できます。

動作例については Unreal サンプルアプリを参照してください。<br>

**EOS Voice**

EOS 特有のコードは、 `OnlineSubsystemEOS` プラグインが uproject ファイルに存在して有効になっている場合に自動的にビルドされます。

セッションの開始は他のすべての関数を呼び出す前提条件であるため、できるだけ早く GGWPSDK を初期化してください。EOS ユーザーが音声チャットチャンネルに参加したら、次を呼び出してください `BindCaptureCallback` して、音声プロセッサを自動的に接続します。

{% code overflow="wrap" fullWidth="false" %}

```csharp
auto GgwpSDK = static_cast<FGGWPSDKModule *>(&FModuleManager::Get().LoadModuleChecked(TEXT("GGWPSDK")));
GgwpResult StartResult = GgwpSDK->StartSession("unrealsession", "unrealuser", FGGWPSDKModule::FCustomerAuthParams {
	"unrealtestcustomer",
	GGWP_AUTH_KEY,
	GGWP_SIGNING_KEY
});

//
// 省略、音声参加
//

IVoiceChatUser* VoiceChatUser = EOSSubsystem->GetVoiceChatUserInterface(*NetId);

if (!VoiceChatUser) {
    UE_LOG(LogTemp, Error, TEXT("VoiceChatUser を取得できません"));
    return;
}

GgwpSDK->BindCaptureCallback(VoiceChatUser);
```

{% endcode %}

#### Discord SDK

GGWP SDK に音声チャンネルの音声をキャプチャさせるには、次を呼び出す必要があります

{% code overflow="wrap" %}

```csharp
FGGWPSDKModule& GgwpSDK = FModuleManager::Get().LoadModuleChecked<FGGWPSDKModule>(TEXT("GGWPSDK"));
GgwpSDK.StartCall(DiscordClient, "MyLobbyId");
```

{% endcode %}

このラッパーは、コールバックが正しい方法で接続され、音声が正しい形式で中継されることを保証します。自分で音声キャプチャコールバックにバインドする必要がある場合は、同じパターンに従って音声を直接キューに入れてください。 `StartCall` ラッパー。

詳細については Discord サンプルアプリを参照してください。
