48.1K Views
January 20, 23
スライド概要
2022年11月18日に行われたライセンシー様向けUE5.1勉強会の資料です。
スライドに埋め込まれた動画は下記URL先のパワポ版にてご確認ください。
https://epicgames.ent.box.com/s/gu5vwl64vxa6c6n2t6py909nwxkngsak
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Game Framework / Network UE5.1 アップデート
Unreal Engine 5.1 Update Game Framework 編 Epic Games Japan Ken Kuwano
Game Framework ● Gameplay ● AI ● UI
Gameplay ● Blueprint ● Blueprint Header View ● Blueprint Namespaces ● Enhanced Input ● ● ● ● Combo (同時押し) 対応 OpenXR 対応 Debug サンプル 対応
Blueprint Header View Blueprint内に定義された変数、関数、ユーザー定義の構造体などをC++コード に変換して表示する機能
Blueprint Header View Blueprint変数, 関数, ユーザー定義の構造体等をC++コードに変換するビュー
Blueprint Namespace Blueprintにグループ名(Namespace)を割り当てる事で、 Blueprintアセットのロードを制限する機能 公式ドキュメント:ブループリント名前空間
Blueprint Namespace ● 問題点 Blueprint を開く度にBlueprint Function Library とBlueprint Macro Library が ロードされるため、Blueprint Editorを初回開く時に時間が掛かる ロードされる BP Editor で開く ロードされる
Blueprint Namespace ● 改善 Namespaceによって ロード対象のBlueprintアセットを制限 Namespace : Lyra.Function Library ロードされない BP Editor で開く Namespace : Lyra.Character ロードされる Namespace : Lyra.Character
Blueprint Namespace アセットロード済 アセット未ロード Blueprint Namespace が制限されている場合、Editor Contextに表示されなくなります
Blueprint Namespace ● 自分自身の Namespace ● Project Settings の Global Namespace ● Editor Preference の Global Namespace ● 追加でロードしたい対象の Namespace Blueprint 個別にインポート(ロード対象とする)する Namespace を定義することも可能
Enhanced Input UE 5.0から追加された新しい入力システム 公式ドキュメント:Enhanced Input プラグイン ● 動的な入力方法の切替や入力デバイス/操作による処理の統一が容易 ● 使い方はLyraサンプルを参照 ● Beta から Production Ready に
Enhanced Input Combo Trigger (複数キー同時押し/指定期間の入力判定) 追加
Enhanced Input Open XR Controller, HMD 用操作に対応
Enhanced Input デバッグ用コンソールコマンド showdebug enhancedinput 対応 入力情報をデバッグ表示可能 ● Input Action リスト ● キー入力情報 ● トリガー時間 ● デッドゾーン情報 など
Enhanced Input テンプレートプロジェクトの入力処理関連をEnhanced Inputに移行 Action Mappings → Input Mapping Context Input Action → Enhanced Input Action UE5.0 UE5.1
Game Framework ● Gameplay ● AI ● UMG
AI ● Mass Entity ● システム再編 ● プロセッサーのマルチスレッド化 ● デバッグの改善 ● Smart Objects ● Gameplay Interaction plugin サポート ● Gameplay Behaviors Smart Objects plugin サポート ● Navigation ● World Partitionの動的ナビメッシュ生成の初期サポート ● State Tree ● 非AIに利用可能な汎用ステートマシン化の拡張
Mass Entity System Beta Mass Agentを制御するのに特化したフレームワーク 公式ドキュメント:MassEntity ● Processorフェーズのマルチスレッド化 ● Mass Debugger UI Toolの追加 詳細は、Unreal Engine 5 - Mass Frameworkを用いた群衆AI制御の解説【CEDEC 2022】
Smart Objects 予約システムを介してオブジェクトにアクティビティを提供する機能 公式ドキュメント:スマートオブジェクト Experimental ● Gameplay Interaction Plugin StateTree と ContextualAnim や AnimMotage を連動する機能を提供 ● Gameplay Behaviors Smart Objects Plugin Experimental StateTree や BehaviorTree から SmartObjects を実行する機能を提供
Navigation Experimental ● World Partitionの動的ナビメッシュ生成サポート ● Navmesh Tileを追加する時のTile数制限到達時にユーザー警告表示追加
State Tree 汎用の階層型ステートマシン 公式ドキュメント:StateTree ● 非AIの汎用ロジックとして利用可能
Splineに沿って動くActorがヒットしたらスピンし、3回ヒットしたら破棄されるステートマシン
State Tree セットアップ方法 1. StateTree, GameplayStateTree プラグインを有効 化 2. StateTree を作成 3. 適用するActorに StateTree Componetを追加 4. StateTree を Component のパラメータにセット 5. プレイ
Game Framework ● Gameplay ● AI ● UI
UI ● UMG ● Accessibility ● Named Slot Widgets ● Tool Palette for the Widget Editor ● Viewmodel/MVVM
Accessibility Experimental 視覚に障害がある方向けの音声読み上げソフト対応の機能 公式ドキュメント:スクリーンリーダーをサポートする ● 複数人のScreen Readerをサポート ● ユーザー毎に異なるピッチの音声出力やスピーチの制御が可能 ● カスタマイズ可能なナビゲーションを提供、操作を細かく制御可能
Named Slot Widgets UserWidget に NamedSlot を適用することによって、 テンプレートウィジェット (親Widget) を作成した時に、 継承したウィジェット (子Widget) でレイアウトを継承が可能 UE5.0 以前 子Widgetでレイアウトに何も追加しない場合は親のレイア ウトを継承できるが、追加した場合はリセットされる UE5.1 以降 親WidgetにNamedSlotを追加することで、親のレイアウト を継承したまま子Widgetにコンテンツを追加できる (子Widgetにコンテンツを追加してもリセットされない) Parent Child
親Widget 子Widget ExposeOnInstanceOnly の設定で 子WidgetへSlotの公開を指定 Named Slot Widgets 親Widgetで設定したNamedSlotを子Widgetに公開して差替えが可能
Unreal Fest での講演 Advanced UI Templating Techniques using Widget Blueprints and Materials | Unreal Fest 2022
Tool Palette for the Widget Editor Beta よく使うツールやWidgetに素早くアクセス可能な機能を提供するプラグイン
UMG Viewmodel Beta デザイナがWidgetを更新する際に、プログラマから独立して作業しやすくするた めのフレームワークを提供するプラグイン 公式ドキュメント:UMG Viewmodel 特徴 ● “プロパティバインド” と “イベント駆動” の両方の長所を提供 ● UIで使用する変数を保持する”Viewmodel”を作成し、Viewmodel内のプロパ ティにウィジェットをバインドすることが可能
現在のワークフロー プロパティバインド 変数を紐づけておけるが毎回監視する必要があるので処理コストが高い Widget ユーザーが目に触れる部分 イベント駆動型 更新するロジックを毎回Blueprintで組んだりする必要がある
将来的なワークフロー Widget View Binding ユーザーが目に触れる部分 Widgetの更新を反映するためのトリガーの設定 View Model Code コンテンツの実データや情報元との仲介データ 実際にデータを計算するロジック部
将来的なワークフロー デザイナの担当 Widget View Binding ユーザーが目に触れる部分 Widgetの更新を反映するためのトリガーの設定 View Model Code コンテンツの実データや情報元との仲介データ 実際にデータを計算するロジック部 プログラマの担当
Unreal Engine 5.1 Update OSS and EOS 編
免責事項 Online Subsystem 2.0 (仮称) は UE5.1 時点において開発途上の機能であり、一 部は参考実装という形で提供されております プロダクションで利用するには不足している機能などが多くあることにご留意く ださい
Epic Online Services
Game Services EPIC ACCOUNT SERVICES All platforms, one community Universal services, ship everywhere Moderation Progression Operations Account Social Friends Overlay … Multiplayer https://dev.epicgames.com/docs/ja
2022/11 現在の提供サービス Game Services EPIC ACCOUNT SERVICES Account Management Matchmaking Voice Chat Lobbies Peer-to-peer Account linking Player Data Storage Stats Achievements Leaderboards Inventory Anti-cheat Player Reports Player Sanctions Kids Web Services Title Storage Game Analytics Player ticketing Kids Web Services Multiplayer Progression Operation Account Login … Moderation Account Linking Presence Friends list Friends Parties Game Invites Social Settings Profile Overlay UI
Online Subsystem
Online SubSystem (OSS) とは 特徴 複数プラットフォームのネットワーク機能を統一インタフェースで利用可能 設定ファイルの変更で利用するプラットフォームが変更可能 ● 各種ネットワーク機能の詳細を隠蔽し、よく利用する機能を簡単に使える ● Matchmaking, P2P, Achievements, etc ● 一部BluePrint にも対応しているが、基本は C++ での利用が前提 https://docs.unrealengine.com/5.0/ja/online-subsystem-in-unreal-engine/
OSS の有効化 ● プラグインの設定から、 利用したいOSS を有効化
OSS v1 の設定例 ● Engine.ini に下記を追加 [OnlineSubsystem] DefaultPlatformService=<Default Platform Identifier>
Online SubSystem 2.0 (仮称) Online SubSystem をよりモダンかつ使いやすい形にしたフレームワークの総称 ● シンプルでわかりやすい API 及びフレームワーク ● 使いやすいクロスプラットフォーム対応機能 ● ブループリントへの対応 ● 豊富な実装サンプルとドキュメント
Online SubSystem 2.0 (仮称) Online SubSystem をよりモダンかつ使いやすい形にしたフレームワークの総称 ● シンプルでわかりやすい API 及びフレームワーク ● 使いやすいクロスプラットフォーム対応機能 ● ブループリントへの対応 ● 豊富な実装サンプルとドキュメント Online Services Plugin Common User Plugin Lyra 及び Webドキュメント
Online Services Plugin 特徴 既存の Online Subsystem と同等の機能を提供する Plugin (C++向け) API や実装方法が既存の OSS と比較して洗練されている ● API デザインによる統一的かつ安全な呼び出しパターン ● ボイラープレートコードの削減 ● Online Subsystem との併用が可能
実装の違い (Event) Online SubSystem Identity->AddOnLoginStatusChangedDelegate_Handle(LocalUserNum, FOnLoginStatusChangedDelegate::CreateRaw(this, &ThisClass::OnLoginStatusChanged)); Online Services Identity->AddOnLoginStatusChanged(this, &ThisClass::OnLoginStatusChanged);
実装の違い (Event) Online SubSystem 別途Delegate の作成 が必要 Identity->AddOnLoginStatusChangedDelegate_Handle(LocalUserNum, FOnLoginStatusChangedDelegate::CreateRaw(this, &ThisClass::OnLoginStatusChanged)); Online Services Identity->AddOnLoginStatusChanged(this, &ThisClass::OnLoginStatusChanged);
実装の違い (Event) Online SubSystem Identity->AddOnLoginStatusChangedDelegate_Handle(LocalUserNum, FOnLoginStatusChangedDelegate::CreateRaw(this, &ThisClass::OnLoginStatusChanged)); Online Services 関数を直接指定可能 Identity->AddOnLoginStatusChanged(this, &ThisClass::OnLoginStatusChanged);
実装の違い (API 呼び出し + Callback)
Online SubSystem
void UMyClass::Login()
{
Identity->AddOnLoginCompleteDelegate_Handle(LocalUserNum,
FOnLoginCompleteDelegate::CreateWeakLambda(this,
[this](int32 /*LocalUserNum*/, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error)
{
Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, LoginCompleteHandle);
if (!bWasSuccessful)
{
UE_LOG(LogTemp, Warning, TEXT("Failed to login: %s"), *Error);
}
else // login successful
{
}
}
});
Identity->Login(LocalUserNum, AccountCredentials);
実装の違い (API 呼び出し + Callback)
Online SubSystem
void UMyClass::Login()
{
Identity->AddOnLoginCompleteDelegate_Handle(LocalUserNum,
FOnLoginCompleteDelegate::CreateWeakLambda(this,
[this](int32 /*LocalUserNum*/, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error)
{
Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, LoginCompleteHandle);
if (!bWasSuccessful)
{
UE_LOG(LogTemp, Warning, TEXT("Failed to login: %s"), *Error);
}
else // login successful
{
}
}
});
Identity->Login(LocalUserNum, AccountCredentials);
コールバック関数の登録と
API 呼び出しが別々
実装の違い (API 呼び出し + Callback)
Online Services
void UMyClass::Login()
{
Identity->Login(MoveTemp(Params))
.OnComplete(this, [this](const TOnlineResult<FAuthLogin>& Result))
{
if (Result.IsError())
{
const FOnlineError Error = Result.GetErrorValue();
UE_LOG(LogTemp, Warning, TEXT("Failed to Login: %s"), *Online::ToLogString(Error));
}
else // login successful
{
const FLogin::Result& LoginResult= Result.GetOkValue();
}
});
}
実装の違い (API 呼び出し + Callback)
Online Services
void UMyClass::Login()
{
Identity->Login(MoveTemp(Params))
.OnComplete(this, [this](const TOnlineResult<FAuthLogin>& Result))
{
if (Result.IsError())
{
const FOnlineError Error = Result.GetErrorValue();
UE_LOG(LogTemp, Warning, TEXT("Failed to Login: %s"), *Online::ToLogString(Error));
}
else // login successful
{
const FLogin::Result& LoginResult= Result.GetOkValue();
}
});
}
API 呼び出し時の返り値に対して、
コールバック関数の設定が可能
(TOnlineAsyncOpHandle)
Online Services が提供する機能 ● Achievements ● Privileges ● Auth ● Sessions ● Commerce ● Social ● Connectivity ● Stats ● ExternalUI ● TitleFile ● Leaderboards ● UserFile ● Lobbies ● UserInfo ● Presence
Online Services Plugin 利用時の注意 (UE5.1) ● UE5.1時点では、Online Services Null/ Online Services EOS のみを提供 ● 今後対応プラットフォームを拡充予定 ● サポートされている機能が制限されている ● Lyra で利用しやすい形での実装 ● Lobby 作成時の各オプションの値が固定値、等 ● 今後のアップデートで柔軟な設定に対応予定 5.1 時点では、プロダクション用途としては OSS v1 の利用を推奨
Common User Plugin 特徴 OSSをラップし、ゲームでよく使う実装パターンをBPから呼び出せるように したPlugin Lyra 内プラグインとして実装されている ● Online Subsystem Plugin 及び Online Services Plugin の両方に対応 ● 複数のプラットフォームで必須となる中核的な処理を提供 ● Common User Subsystem (ログイン, 認証) ● Common Session Subsystem (セッション管理)
Commo User Plugin のインストール Lyra プロジェクトから “Plugins/CommonUser” フォルダを自プロジェクトへコ ピーして、エディタ上から有効化してください ● 参考ドキュメント
Login
Quick Play Session
Lyra 特徴 UE5 のフレームワークの理解を深めるためのサンプル TPS ゲーム Common User Plugin や Online SubSystem の機能も多数使われており、動 作を確認するのに最適 ● C++ と BluePrint ● Common User Plugin を使った実装 ● Engine.ini で OSS と Online Services のどちらを使うか設定可能
Lyra をOnline Services で動かす デフォルトでは Online Subsystem Null で動作している ● "-customconfig=EOS" を引数に指定して起動することで Online Subsystem EOS を使って起動可能 ● ini ファイルの更新などはこちらのドキュメントを参考に設定してください ● Online Services を使う場合は、Engine.ini 内でOnline Services の有効化 及 び Online Subsystem の無効化が必要 ● 参考URL