ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

【UEFN】デフォルトマップを変更する方法

はじめに

プロジェクトに新規追加したレベル(マップ)で「セッションを開始」をしようとすると下記の警告が出ます。

プレイしようとしているマップは、デフォルトのマップではありません
このプロジェクトのデフォルトのマップは /【プロジェクト名】/【プロジェクト名】 です
続行しますか?
[いいえ]を選択すると、UEFNにデフォルトのマップがロードされます

「はい」を押すと警告を無視して「セッションを開始」できますが、警告は取り除くべきです。
ということで、デフォルトマップを変更して警告が出ないようにします。

デフォルトマップの変更方法について

【プロジェクト名】コンテンツフォルダにあるGameFeatureDataアセットでデフォルトマップの情報を管理しています。

GameFeatureDataをダブルクリックで開き、「セッションを開始」したいレベルアセットを指定します。

そして保存すると、「セッションを開始」する際の警告が出なくなります。やったね!

余談

GameFeatureDataアセットはFortGameFeatureData型のアセットです。

FortGameFeatureDataがどういうクラスなのかは知ることができませんが、近い名前のものがUnreal Engine側にあります。GameFeatureDataがどんな処理をしているアセットなのかを想像する上でのヒントになるかもしれません。
docs.unrealengine.com

おしまい

【UE5】UE5.1でData Layer Assetのアセット名・配置場所を変えるときは十分に気をつけて!という話

はじめに

今回紹介する不具合は下記番号で修正リクエスト済みですが、少なくともUE5.1.0, UE5.1.1 では確実に発生します。UE5.2以降で修正済みか否かに関しては下記URLからご確認ください。

UE-176093 If the DataLayerAsset name or asset path changes, Actors registered to it will ignore the DataLayer's settings
Unreal Engine Issues and Bug Tracker (UE-176093) (見れない場合は数日お待ち下さい…)

結論

  • UE5.1からDataLayerの仕組みが大きく変わって、DataLayerAssetというアセットとDataLayerInstanceで管理するようになりました
  • そのDataLayerAssetの名前、またはアセットの置き場所を変更すると厄介な問題が発生します
  • 具体的には、そのDataLayerで管理していたActorがDataLayerの設定を無視するようになります(DataLayerがUnload設定になっていても、管理対象のActorが表示・生成されてしまう)
  • 解決するには問題が発生しているActorをSaveするか、DataLayerに再アサイン(remove -> add)する

どんな問題が発生して、どうやって解決するかの動画

www.youtube.com

悪戦苦闘している様子


おしまい

【UE4・UE5】StringTableに項目を追加・削除・リセットするBPノードの作り方

はじめに

小ネタですが、EUWなどからStringTableに項目を追加したり、項目を削除・リセットする必要が出てきたのでそのメモを


StringTableって何って方はこちらの記事をどうぞ。非常によくまとまっていてオススメです!(いつもありがとうございます!)
qiita.com

上記の記事にある通り、エディタ上での操作であったり、CSVファイルをインポートすることでStringTableの各項目を編集することができます。また、TableIDとKeyからSoruceStringを取得したりもできます。
しかし、動的に項目を追加・削除するBPノードは用意されていません。そのため、CSVファイルを事前に用意 または 動的生成してインポートするという少し手間が発生します。

ということで、BPからStringTableを自由自在に編集できるように Add, Remove, Reset用のBPノードを作ってみました。といっても、既存のC++側にある関数を呼び出してるだけなのでかんたんです。

各コード

事前準備

#include "Internationalization/StringTable.h"
#include "Internationalization/StringTableCore.h"
#include "Internationalization/StringTableRegistry.h"

StringTableに要素を追加

void UMyBlueprintFunctionLibrary::AddSourceStringToStringTable(const FName TableId, FString Key,
	FString NewSourceString)
{
	UStringTable* StringTable = FStringTableRegistry::Get().FindStringTableAsset(TableId);
	if (StringTable)
	{
		StringTable->Modify();
		StringTable->GetMutableStringTable()->SetSourceString(Key, NewSourceString);
	}
}

StringTableの要素を削除

void UMyBlueprintFunctionLibrary::AddSourceStringToStringTable(const FName TableId, FString Key,)
{
	UStringTable* StringTable = FStringTableRegistry::Get().FindStringTableAsset(TableId);
	if (StringTable)
	{
		StringTable->Modify();
		StringTable->GetMutableStringTable()->RemoveSourceString(Key);
	}
}

StringTableの全要素を削除(リセット)

void UMyBlueprintFunctionLibrary::ResetStringTable(const FName TableId)
{
	UStringTable* StringTable = FStringTableRegistry::Get().FindStringTableAsset(TableId);
	if (StringTable)
	{
		StringTable->Modify();
		StringTable->GetMutableStringTable()->EnumerateKeysAndSourceStrings
		([&](const FTextKey& InKey, const FString& InSourceString) -> bool
		{
			StringTable->GetMutableStringTable()->RemoveSourceString(InKey);
			return true; // continue enumeration
		});
	}
}

さいごに

上記処理はShippingを含むパッケージでも動作するので、ゲーム実行中に外部(ローカルのファイルやGoogleスプレッドシートなど)から取得したデータを動的に反映したりもできます。StringTableのSourceStringに英語や日本語などの実際にゲーム中使用する言語を設定している場合はかなり便利かなと思います。デフォルト言語を使用しない言語にしている場合はちょっと微妙ですが…。
(↑の内容がよくわからん!という方はこちらの記事・資料をどうぞ)
UE4 ローカライゼーションダッシュボードを試してみる - Qiita
最新UE4タイトルでのローカライズ事例 【UE4 Localization Deep Dive 2019】 | ドクセル

おしまい

【UE5】グラフベースのUIで処理の流れを組める「Common Conversation」プラグインを動かす簡単なサンプルを公開しました!

この記事は Unreal Engine (UE)のカレンダー | Advent Calendar 2022 2日目の代理投稿記事です。

はじめに

突然ですが、UE4.27から追加されているCommon ConversationプラグインUE5.1で動かしてみたというサンプルプロジェクトを公開しました!
github.com
上図のようなグラフベースのUIを使って、会話・クエスト・ゲームの進行状況などを管理・制御することができます。

良い所

  • グラフベースのUIで処理の流れ・分岐を組むことができ、呼び出す側はGamePlayTag、会話の参加者の情報を渡すだけで実行できる。
  • そのため、ゲームデザイナはゲーム本体の実装を弄ったり、複雑な文字ベースのスクリプトを触ったりすることなく、処理やイベントの流れを組むことができる
  • 選択肢、一つ前の分岐に戻るなど、会話やイベント進行で最低限必要な機能は用意されている(が、後述の通りプロジェクトに応じて機能追加することは必須)
  • マルチプレイを前提とした実装になっている(が、後述の通りシングルプレイの場合はひと工夫が必要)

注意

  • Common Conversation自体が公式でサポートされていない実験的機能のため、本サンプルも動作保証をしません。何かトラブルが発生した際は独自に解決・拡張・エンジン改造をお願いします。
  • 最低限の内容ですので、実際に使用する際はプロジェクトに応じてカスタマイズする必要があります
  • Common Conversationの仕様によりBPのみでは実装することができないため、C++プロジェクトになっています。また同じく仕様によりGameFeature機能を活用しています。
  • Common Conversationはマルチプレイを想定した機能になっているため、エンジン標準ではシングルプレイゲームでは機能しません。そのため、シングルプレイでも動作するようにC++で専用のBPノードを用意しています。

…動作保証しない感じならサンプルなんて作るなよ!という言葉も聞こえてきそうですが、僕も含めてどんな機能なのか気になった方も多いと思うので公開してみました!(現時点でドキュメントや参考記事類が社内外で一切ないのでエンジンコードを見るしかないですし…結構たいへんでした…)

ということもあり、初心者の方にはオススメできるものではなく…サンプルにおける実装とエンジンコードを合わせて機能・仕様を把握・カスタムできる人を想定としたものです。ご理解くださいまし。

以降はサンプルのちょっした解説とか、エンジンコードで見るべき所とかを雑多に書いてます。

続きを読む

【UE4・UE5】SteamDeck上でUnrealEngineで作ったパッケージ(実行ファイル)を動かしてみた!

この記事は Unreal Engine (UE)のカレンダー | Advent Calendar 2022 - Qiita 11日目の代理投稿記事です。

はじめに

Steamを運営しているValue社による新しい携帯型ゲーム機「Steam Deck」が届きました!
わーい!

SteamDeckとはなんぞや?という方向け

www.steamdeck.com
www.famitsu.com

SteamDeckではSteam上で販売されているゲームだけでなく、その他のストアなどで販売・配布されている様々なPCゲームを動かすことができます。そして、Unreal Engineで作成した自作コンテンツも動かすことができます!

しかも、SteamDeckに組み込まれているProtonという機能のお陰で、Windows向けに作ったものをそのままSteamDeckに送るだけで実行できてしまいます!
Steam Deck and Proton (Steamworks Documentation)

Steam DeckはかなりValue社的に力が入っているようで、Steamで販売されている各ゲームでSteamDeckでの動作をチェックして対応状況について表示したりしています。更に、今後のゲーム提出プロセスの一部としてもSteam Deckを使った検証テストが入るようです( Steam Machineのリベンジ感がすごい )。
参考:Steam Deck FAQ (Steamworks Documentation)

他にも色々ありますが…ひとまず今後Steamでの販売を検討したり、ゲーム系のイベント・展示会にて展示を予定している方にとっては重要なデバイスになっていきそうです!


ということで、第一歩としてUnreal Engineで作ったコンテンツをSteamDeckで動かすまでの流れをメモ代わりに書いていきます。

なお、以降についてはSteamアカウントの作成とSteam Deck自身の起動・アップデートは既に行っているという前提で進めます。(日本での発売日に届いた方、本体アップデートが来ているので設定からの更新をお忘れなく!)

また、本記事は日本での発売日である2022/11/17時点での情報であり、今後のアップデートで色々変わる部分もあるかと思います。参考程度にどうぞ。

そして、既にSteamページを持っていて実行ファイルの配布環境がある方はそこからDLする方が「単純に動かす分には楽」です。ただガリガリ開発している間は毎回Steamにアップするのは面倒ですし、今回説明する直接Steam Deckに送る方法の方がrsyncによる高速な同期が行われるのでサクッと実機確認ができて便利だと思います。

続きを読む

【UE5】UE5のアニメーションに関する新機能をサクッと試せるサンプルを公開しました!

はじめに

この記事は Unreal Engine (UE) Advent Calendar 2022 の 13日目の記事です。


github.com

UE5のアニメーションに関する新機能をサクッと試せるサンプルを…
公開しました!

www.youtube.com

UE5のアニメーションに関する新機能をかんたんに確認・検証するために用意したサンプルです。
各機能のON/OFF・プロパティを制御するUIを使って、標準のアニメーションに新機能を適用した際の効果を見ることができます。また、サンプルにあるAnim Blueprint(ABP_UE5AnimSystemSample)を見ることで、各新機能の使用方法についても確認できます。

現時点では、下記機能を試す・確認することができます。

  • Pose Warping
  • Stride Warping
  • Orientation Warping
  • Slope Warping
  • Foot Placement
  • Distance Matching
  • Blueprint Thread Safe Update Animation
  • Anim Node Functions
  • Property Access

各機能の概要に関しては公式ドキュメント、または下記スライドをご確認ください。
猫でも分かる UE5.0, 5.1 におけるアニメーションの新機能について【CEDEC+KYUSHU 2022】

UE5のアニメーション新機能は非常に強力ですが、公式ドキュメントでの解説が少し足りていなかったり、動くサンプルであるLyra Stater Gameが少し複雑で見づらいということもあり…シンプルな構成で実装したものをサンプルとして公開してみました!

サンプルの構成

Content/UE5AnimSystemSample/Animation/ABP_UE5AnimSystemSample

処理の大半はここに書かれています。是非いろいろ見てみてください!

ちなみに、Distance Matchingに関する解説は別途記事として公開しています。
pafuhana1213.hatenablog.com

Content/UE5AnimSystemSample/UI/UMG_SampleSettings


Character Movement Component, Anim BPのプロパティだけでなく, Console Variablesを編集できるメニューUIです!
地味に少し凝った?ことをしてるので、AnimBPを見飽きた頃にでもぜひ

少しでも今後の参考になれば嬉しいです!
そして、明日のカレンダーの記事も楽しみですー!
Unreal Engine (UE) Advent Calendar 2022 の 13日目

おしまい!

【UE5】UE5からの新機能「Distance Matching」を使ってみよう!(サンプル配布あり)

はじめに

UE5からアニメーション新機能として「Distance Matching」が追加されていました!これは「Characterの動きに合わせてアニメーションの再生速度を調整することで、アニメーションに対しての違和感(足滑りなど)を軽減する」ための機能です。

docs.unrealengine.com


例えば、上図の左側はCharacterが止まる際に両足がジタバタして滑っているように見えます。これはCharacter(ゲーム側)の動きとアニメーションにおける足の動きが合っていないためです。
これにDistance Matchingを適応したのが右側の画像です。キュッと止まるCharacterの動きに合わせて再生速度を早くすることで、アニメーションとCharacter側のズレがなくなって違和感が軽減されています!

また、近づいてくる地面に向かって脚を伸ばすような動きも表現することもできます!

という非常に良い感じの機能なのですが、使い方があまり詳しく説明されていません…。一応公式ドキュメントに「着地時の脚伸ばし」の実装手順があるのですが所々画像がなくて分かりづらかったり、DistanceMatchingを活用しているLyra Starter Gameはサンプルとしては複雑すぎて見るのが正直辛いと思います…。

ということで、DistanceMatchingをシンプルに実装したサンプルを公開しました!(他のUE5でのアニメーション新機能も含めてます)

github.com


このサンプルではストップ時の速度調整をDistance Matchingで行っています。
上記リンク先ではDistance Matching用アセットのセットアップまでは書いていますので、本記事ではそれ以降の手順や設定について説明します。なお、上記サンプルをベースに説明しますので、手元で開いた状態で読むと分かりやすいかと思います!

また、下記スライドをざっくりと目を通していることも前提とします(具体的には、Distance Matching, Anim Node関数、Property Accessの部分)。
猫でも分かる UE5.0, 5.1 におけるアニメーションの新機能について【CEDEC+KYUSHU 2022】 | ドクセル

続きを読む