UE4 サンプル用アプリケーション

このセクションでは、UE4 の Cube サンプルのアプリケーションと Genvid のプラグイン、そしてモジュールの使用方法について説明します。

  1. はじめに
  2. コンテンツ
  3. C++ Classes
  4. Blueprint のゲーム class
  5. Blueprint の Genvid Class
  6. Blueprint 構造体
  7. アセット
  8. Cube サンプルの実行方法
  9. Genvid 統合
  10. インスタンス化

Cube サンプルの実行については、ローカルクラスタの開始 を参照してください。

注釈

このサンプルを起動する際には、4.15.3 から 4.26.1 のバージョンを使用していることを確認してください。

はじめに

Cube サンプルでは、Unreal Engine 4 Basic Code テンプレート (新規プロジェクト) が使用されています。Cube サンプルは DirectX のサンプルコードを調整したものです。Genvid 統合のすべてを紹介するため、利用可能な全機能を追加しています。

../../../_images/ue4_New_Project.png

図 65 新規プロジェクト

目次

Cube サンプルでは、Athos、Porthos、Aramis という 3 つのキューブが表示されます。それぞれのキューブは、さまざまな方向に回転や移動を行います。キューブがワールドの端まで移動すると、音が鳴り、キューブは反対側に移動して、移動を継続します。

C++ Classes

  • Cube.cpp : このファイルが、ゲームモジュールを実行します。
  • Cube.h : ゲームモジュールのヘッダーファイル。
  • ActorCube.cpp : キューブの行列変換機能を含むアクター class。
  • ActorCube.h : Blueprint で呼び出し可能な関数を宣言するヘッダーファイル。
  • Game.cpp : プレイヤーのビュー射影行列を含む UObject から派生した class。
  • Game.h : Blueprint で呼び出し可能な関数を宣言するヘッダーファイル。

Blueprint ゲーム class

  • BP_Cube : キューブの表示、管理に使用する class。
  • BP_Pawn : デフォルトのポーンとして使用される class。
  • BP_GameInstance : Genvid セッションマネージャのインスタンス化に使用される class。
  • BP_GameMode: ゲーム classes の設定に使用される class。
  • BP_GameState: クライアントからのイベントとコマンドの受信に使用される class。
  • BP_PlayerController: サーバーへのイベントとコマンドの送信に使用される class。

Blueprint Genvid Class

  • BP_GenvidSessionManager : Genvid セッションの管理に使用される class。
  • BP_GenvidSession : Genvid セッションのセットアップに使用される class。
  • BP_GenvidAudio : Genvid オーディオのパラメータを設定するために使用される class。
  • BP_GenvidVideo : Genvid ビデオパラメータの設定に使用される class。
  • BP_GenvidStreams : Genvid イベントのセットアップに使用される class。
  • BP_GenvidEvents : Genvid イベントのセットアップに使用される class。
  • BP_GenvidCommands : Genvid コマンドのセットアップに使用される class。

Blueprint の構造体

  • BP_CubeData : キューブデータの格納に使用する構造体。
  • BP_GameData : すべてのキューブおよびビュー射影行列を格納する構造体。
  • BP_NameToColor: 色と名前を格納する構造体。
  • BP_ColorChanged: アノテーションの色と名前を文字列で格納する構造体。
  • BP_Popularity: キューブ名の popularity を格納する構造体。
  • BP_PopularityData : 全キューブの数を格納する構造体。

アセット

  • MainMap : ゲームレベル map。
  • Colored_Steel : キューブに使用される素材。
  • galvanized_steel : キューブの素材に使用されるテクスチャ。
  • EdSplash.bmp : Unreal Editor に使用されるスプラッシュ画面。
  • Splash.bmp : Cube サンプルに使用されるスプラッシュ画面。

Cube サンプルの実行方法

このガイドは、お使いのシステムが Genvid DirectX サンプルおよび、Genvid サービスを実行できるように正しく設定されていることを前提としています。サービスの実行については、 ローカルクラスタの開始 を参照してください。

  1. お使いの Unreal Engine 4 バージョンのエンジンのディレクトリを指定する UE4ENGINEDIR という環境変数を宣言してください。デフォルトでは UE4ROOT/Engine のはずです。 UE4ROOT は、Unreal Engine 4 のインストールディレクトリです。

    注釈

    使用するエンジンバージョンを指定できるようになりました。

    Epic Games Launcher を使用する場合、python スクリプトが Unreal Engine のインストールされたすべてのバージョンのパスを自動的に取得します。

    プロジェクトをビルドする場合 (手順 3)、オプション -v または --version とエンジンのバージョン番号をビルドコマンドの末部につけます。

    例えば、Unreal Engine Version 4.19 でビルドするには:

    py ue4.py build -v 4.19
    

    ゲームランチャーを使用していない場合、環境編集を手動で設定することができます。手動で設定するには、以下の場所に以下の形式で変数名を宣言します: UE4ENGINEDIR_{1}_{2}

    • {1} がメジャーバージョン、
    • {2} がマイナーバージョンです。

    変数 -e を使用して、手動で割り当てた環境変数を使用していることを指示します。

    py ue4.py -e build -v 4.19
    
  2. キューブのビルドフォルダを準備する。

    py ue4.py prepare
    
    Genvid プラグインと Genvid モジュールが

    cube/app フォルダにコピーされます。

  3. プロジェクトのビルド

    py ue4.py build
    

    プロジェクトの Visual Studio ソリューションが生成され、すぐにビルドが開始されます。

    注釈

    パッケージのビルド中に問題が発生した場合:

    • プロジェクトファイルが Unreal Engine に関連付けられていることを確認します。Unreal Engine ディレクトリ: Engine\Binaries\Win64UnrealVersionSelector プログラムを使用します。
    • エンジンのバージョンを更新した場合は、 samples\cube\ue4\app 配下、 Cube サンプル の Intermediate ディレクトリを削除してください。
  4. プロジェクト設定を消去して読み込みます。

    genvid-sdk setup # Make sure the local cluster is created.
    genvid-sdk clean-config # Clean old config in case of existing cluster.
    genvid-sdk load-config-sdk # Configure the basic services for the SDK.
    py ue4.py load # Configure the cube jobs and settings.
    
  5. /samples/cube/web ディレクトリに移動します。

  6. Web サイトを構築します。

    py web.py build
    
  7. Web サイトを読み込みます。

    py web.py load
    
  8. プロジェクトを開始します。

    genvid-sdk start
    

Genvid 統合

Genvid Blueprint Class の作成

Unreal Editor を直接経由して、アプリケーション内で Genvid SDK を統合することが可能な 7 つの class があります。

実装するにあたり、 class ごとに Blueprint を作成する必要があります。

../../../_images/UE4_Blueprint_Create_Genvid.png

図 66 Genvid の Blueprint

作成が終わったら、次の Content Browser があるはずです。

../../../_images/ue4_Content_Browser_Blueprints_Genvid.png

図 67 コンテンツ ブラウザ (Genvid の Blueprint)

Blueprint の設定

必要な Blueprint をすべて作成したら、設定してください。

BP_GenvidSessionManager

BP_GenvidSessionManager class は、データのみの Blueprint です。 Genvid セッションを選択するのに使用します。

Details タブで、

  1. GenvidVideo の使用する Session Class 向けに作成した Blueprint を選択します。
  2. 適用するゲームのフレームレートを設定します。
  3. Activate SDK オプションを選択します。

注釈

Genvid Module は将来的に複数のセッションをハンドルするように設計されています。今のところは、現行の Genvid SDK の設計に準拠して、GenvidSessionManager インスタンスが含めることができるのは単一の GenvidSession のみです。

../../../_images/BP_GenvidSessionManager_Details1.png

図 68 Genvid セッション マネージャ

** BP_GenvidSession **

BP_GenvidSession class は、データのみの Blueprint です。利用するには、ビデオ、オーディオ、ストリーム、イベント、およびコマンドを選択します。

Details タブで、各 class 用に作成した Blueprint を選択します。 (たとえば、 Video Stream Class 向けに GenvidVideo から作成した Blueprint を選択します。)

../../../_images/BP_GenvidSession_Details1.png

図 69 Genvid のセッション

BP_GenvidVideo

BP_GenvidVideo class は、データのみの Blueprintです。使用して、ビデオストリームのパラメータを設定します。

  • Stream Name : ビデオストリームのユニーク名。
  • Framerate: 期待される video-data のフレームレートを Genvid に伝えます。
  • Video Mode : ビデオキャプチャモード。(Automatic または Texture)
  • Video Source : ビデオのデータ ソース。(選択したビデオ モードで必要な場合のみ。)
../../../_images/BP_GenvidVideo_Details1.png

図 70 Genvid ビデオ

** BP_GenvidAudio **

BP_GenvidAudio class は、データのみの Blueprint です。使用して、オーディオストリームのパラメータを設定します。

  • Stream Name : オーディオストリームのユニーク名。
  • Audio Format : オーディオ データ形式。(GenvidAudioFormat_S16LE または GenvidAudioFormat_F32LE)
  • Audio Mode : サウンド キャプチャ モード。
../../../_images/BP_GenvidAudio_Details1.png

図 71 Genvid オーディオ

** BP_GenvidStreams **

BP_GenvidStreams class には、すべてのストリームを作成および管理するための必要なコードがすべて含まれています。

GenvidStream 構造体を使用してストリームを作成します。 All Possible Actions のコンテキストメニューに Make GenvidStream と入力して、 Event Graph に追加します。

../../../_images/BP_GenvidStreams_MakeGenvid_Menu1.png

図 72 Make GenvidStream (Genvid ストリーム)

ノードを追加すると、ストリームのパラメータを設定できるようになります。

  • Name : ユニークなデータストリーム名。
  • Framerate : ストリームを送信するレート。
  • Stream (Tick) : イベントは、フレームごとに呼び出されます。(Framerate で設定。)
  • Stream (Begin Play) : イベントは、ストリームが作成されたときに一度呼び出されます。
  • Stream (Match Started) : イベントは、ゲームの開始時に一度呼び出されます。
  • Stream (Match Ended) : イベントは、ゲームの終了時に一度呼び出されます。
  • Stream (End Play) : イベントは、ストリームが破棄される前に一度呼び出されます。

注釈

Framerate プロパティはイベント ストリーム (チェックマーク) でのみ使用できます。

フレームごとにイベントを呼び出すには、 Framerate プロパティに 0 を設定します。

../../../_images/BP_GenvidStreams_MakeGenvidStream_PinOptions1.png

図 73 GenvidStream のピンオプション

それぞれの選択するストリームイベントで、

  1. カスタムイベントを追加します (All Possible Actions コンテキストメニューに Custom Event を入力して Event Graph に追加してください)。
  2. カスタムイベントから呼び出したい関数にノードを追加。
../../../_images/Blueprint_Construct_GenvidStreams1.gif

図 74 サンプル作成の例

ご用心

ストリームイベントはオプションです。ストリームイベントを選択して、カスタムイベントをリンクしないと、Blueprint はコンパイルされません。カスタムイベントにリンクするか選択を解除するかします。

../../../_images/BP_GenvidStreams_AddCustomEvent_Menu.png

図 75 カスタムイベント

ストリームイベントを作成した後に、Set Streams 変数に追加します。

../../../_images/BP_GenvidStreams_SetStreams_Menu.png

図 76 ストリーム変数の設定

このサンプルでは、BP_GenvidStreams の Blueprint を使用してキューブ名、キューブの色、キューブの位置、カメラ情報、ゲームの著作権のデータストリームを作成しています。

../../../_images/UE4_Blueprint_Create_Genvid.png

図 77 GameData ストリーム

各ストリームは、ID、送信頻度、デリゲートで定義されます。

../../../_images/UE4_Blueprint_Create_Positions_Stream.png

図 78 ポジションストリーム

オーガナイズと柔軟性を効率よく実現するために、データタイプごとにデータストリームを作成することをお勧めします。

BP_GenvidEvents

BP_GenvidEvents class には、すべてのストリームのイベントの作成と管理に必要なコードが含まれています。

GenvidEvent 構造体を使用して、イベントサブスクリプションを作成します。 All Possible Actions コンテキストメニューに Make GenvidEvent と入力して、 Event Graph に追加します。

../../../_images/BP_GenvidEvents_MakeGenvidEvent_Menu1.png

図 79 Make GenvidEvent

ノードを追加すると、イベントのパラメータを設定できるようになります。

  • Name : データストリームのユニーク名。
  • Replicated: クライアントまたはサーバー(信頼できるクライアント/サーバーネットワークモデル)にデリゲートを呼び出します。
  • Delegate : Genvid SDK がイベントを受信すると発生するイベント。
../../../_images/BP_GenvidEvents_MakeGenvidEvent.png

図 80 Genvid イベントのパラメータ

Delegate パラメータから

  1. カスタムイベントを追加します (All Possible Actions コンテキストメニューに Custom Event を入力して Event Graph に追加してください)。
  2. 定義済みのパラメータを持つノードを追加するには、 Add Custom Event... を選択します。
../../../_images/BP_GenvidEvents_AddCustomEvent_Menu.png

図 81 カスタムイベント

../../../_images/BP_GenvidEvents_AddCustomEvent.png

図 82 カスタムイベントノード

ここで Genvid Events 変数に新規イベントを追加します。

  1. All Possible Actions コンテキストメニューに GenvidEvents Set Events と入力します。
  2. Set Events を選択します。
../../../_images/BP_GenvidEvents_SetEvents_Menu.png

図 83 イベント変数

次の画像は、完全に定義されたイベント Blueprint の表示例です。ご利用になる Blueprintは、アプリケーションのイベントをアレンジしたり管理する方法によって異なります。

../../../_images/BP_GenvidEvents_Color.png

図 84 カラー イベント

../../../_images/BP_GenvidEvents_Construct.png

図 85 Genvid イベントの構築

BP_GenvidCommands

BP_GenvidCommands class には、コマンドを作成したり管理するために必要なコードが含まれています。

新規コマンドのサブスクリプションを作成するには、構造体 GenvidCommand を使用します。 All Possible Actions コンテキストメニューに Make GenvidCommand と入力して、 Event Graph に追加します。

../../../_images/BP_GenvidCommands_MakeGenvidCommand_Menu1.png

図 86 Make GenvidCommand

ノードを追加すると、コマンドのパラメータを設定できるようになります。

  • Name : コマンドのユニーク名。
  • Replicated: クライアントまたはサーバー(信頼できるクライアント/サーバーネットワークモデル)にデリゲートを呼び出します。
  • Delegate : Genvid SDK がコマンドを受信すると発生するコマンド。
../../../_images/BP_GenvidCommands_MakeGenvidCommand.png

図 87 Genvid コマンドのパラメータ

Delegate パラメータから

  1. カスタムイベントを追加します (All Possible Actions コンテキストメニューに Custom Event を入力して Event Graph に追加してください)。
  2. 定義済みのパラメータを持つノードを追加するには、 Add Custom Event... を選択します。
../../../_images/BP_GenvidCommands_AddCustomEvent_Menu.png

図 88 カスタム コマンド

../../../_images/BP_GenvidCommands_AddCustomEvent.png

図 89 カスタム コマンド ノード

ここで GenvidCommandsGenvid Commands 変数に新規イベントを追加します。

../../../_images/BP_GenvidCommands_SetCommands_Menu.png

図 90 コマンド変数

次の画像は、完全に定義されたコマンド Blueprint の表示例です。お使いの Blueprintは、アプリケーションのコマンドをアレンジしたり管理する方法によって異なります。

../../../_images/BP_GenvidCommands_Direction.png

図 91 方向コマンド

../../../_images/BP_GenvidCommands_Construct.png

図 92 Genvid コマンドの構築

UE4 Cube Sample Blueprints

Blueprint の BP_Cube class には、必要なすべてのゲーム コードが含まれています。

Blueprint の BP_GameInstance class には、 Genvid SessionManager の初期化および終了に必要なすべてのコードが含まれています。

../../../_images/ue4_GenvidSessionManager_Initialize_Terminate1.png

図 93 GenvidSessionManager - 初期化/終了

ゲームイベントとゲームコマンドに関連するすべてのコードも含まれています。

イベント:
  • ChangeColor
  • Cheer
  • Reset
コマンド:
  • Direction
  • Speed
  • Reset

Blueprint class BP_GameMode には、AGameState 用の class と APlayerState に基づく class を使用するためのすべての設定が含まれています。

../../../_images/ue4_BP_GameMode.png

図 94 GameMode

Blueprint class BP_GameState には、Genvid イベントとコマンドの受信に必要なすべてのコードが含まれています。

../../../_images/ue4_BP_GameState.png

図 95 GameState

Blueprint class BP_PlayerController には、次の 3 つのコンポーネントが含まれています。

  • BP_GenvidStreams
  • BP_GenvidEvents
  • BP_GenvidCommands

Genvid SDK クライアント/サーバーアーキテクチャの準拠に応じて必要となります。 詳細は Unreal Engine 4 用 Genvid クライアント/サーバー を参照してください。

../../../_images/ue4_BP_PlayerController.png

図 96 PlayerController

注釈

ゲームデータをサーバーに送信する際、すべてのデータ構造は自動的にすべて JSON にシリアライズされます。

インスタンス化

Genvid セッション は、オーディオ/ビデオキャプチャの初期化と最終化を自動的に管理します。

すべてのストリーム、イベント、コマンドは、PlayerController で管理されます。

GenvidSessionManager をインスタンス化する場所として、 UGameInstance に基づく class 内を推奨します。アプリケーションの起動時に Initialize() 関数を、停止時に Terminate() を呼び出します。