fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

| PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++で列挙型(Enum)を文字列(FText)や「Enum名」を含めた文字列(FString)に変換する(GetDisplayValueAsText、GetValueAsString)

C++で列挙型(Enum)を文字列(FText)や「Enum名」を含めた文字列(FString)に変換する方法です。

こちらを参考にさせていただきました。

・[C++] EnumをString化する
https://zenn.dev/aziogroup/scraps/5326994431719e#comment-3be3d2d8f2fa82

「StaticEnum< Enum名>()->GetDisplayValueAsText(定義名)」で定義名のみを取得。
StaticEnum< Enum名>()->GetValueAsString(定義名)」でEnum名を含めた定義名を取得できるようです。

実際にやってみました。

まずはこんな感じで「Enum」を用意しました。

UENUM(BlueprintType)
enum class EBlogEnum : uint8
{

One = 0,
Two,
Three,
Count,
};


上記「Enum」の定義を文字列に変換してみました。

// Enum を文字列に変換
// Enum名は含めない : Override Root Scale
FText aEnumText = StaticEnum< EBlogEnum>()->GetDisplayValueAsText(EBlogEnum::One);
UE_LOG(LogTemp, Log, TEXT("EnumText = %s"), (*aEnumText.ToString()));

// Enum名を含める : ESpawnActorScaleMethod::OverrideRootScale
FString aEnumString = StaticEnum< EBlogEnum>()->GetValueAsString(EBlogEnum::Three);
UE_LOG(LogTemp, Log, TEXT("EnumString = %s"), (*aEnumString));


結果はこんな感じになります。

LogTemp: EnumText = One
LogTemp: EnumString = EBlogEnum::Three


こういった機能は便利なので覚えておきたいですね。
デバッグ機能としても優秀だと思います。

こちらに別の方法もありますので一応メモしておきます。

・C++で列挙型(Enum)を文字列(FString、標準文字列)に変換する(GetNameStringByIndex)
http://kagring.blog.fc2.com/blog-entry-651.html

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 複数のアセットのパラメータをプロパティマトリックスを使って一括で編集する(Property Matrix)

複数のアセットのパラメータをプロパティマトリックスを使って一括で編集する方法です。

公式ドキュメントはこちら。

・プロパティ マトリックス(Property Matrix)
https://docs.unrealengine.com/4.27/ja/Basics/UI/PropertyMatrix/

プロパティマトリックス(Property Matrix)という機能を使うことで複数のアセットの編集ができるようです。
プロパティマトリックス(Property Matrix)へのアクセスはドキュメントを見る限り二通りあるようです。

[Details (詳細)] パネルの 検索 ボックスに隣接する Property Matrix ボタンで、 現在の選択内容に関連する プロパティマトリックス を起動します。

コンテンツ ブラウザ でアセットを選択し、右クリック して、Asset Actions を選択します。次に、コンテキスト メニューから Bulk Edit via Property Matrix (プロパティ マトリックスを用いたバルク編集) を選択します。

今回は後者のアセットアクションからアクセスして編集してみようと思います。

まずは一括編集したいアセットを複数選択します。
プロパティマトリックス000
今回はアニメーションモンタージュで試してみることにしました。
上記画像では3つのアセットを選択しています。

次にアセットを複数選択した状態で右クリックするとでるメニューから
「アセットアクション(Asset Actions)」の「プロパティマトリックスで一括編集(Bulk Edit via Property Matrix)」を選択
します。
プロパティマトリックス001

すると、こんな感じでプロパティマトリックスによる編集ウィンドウが開きます。
プロパティマトリックス002
あとはこのウィンドウでアセットの値を編集するだけになります。

試しに編集してみるとこんな感じになりました。
プロパティマトリックス003
選択していたすべてのアセットに対して編集が行われたのがわかると思います。

できればあまり一括編集をしなくてはならない事態にはなりたくないとは思いますが、
いざという時にはなるべく効率よくできるといいのかなと思いますので、使っていければと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5 「Print String」がどのアセットから出力されているかを確認する(bp.BlamePrintString)

「Print String」がどのアセットから出力されているかを確認する方法です。

こちらのツイートを見かけました。
「bp.BlamePrintString」をコンソールコマンドに入力することで、どのアセットから出力されているかが可視化できるようです。

というわけで試してみます。
PrintStringのノードの位置000
こんな感じのノードを組んでみました。
「P」キーを押すたびに「Print String」で文字を表示しているのですが、
毎回「bp.BlamePrintString」を切り替える。といった処理を挟んでいます。

結果はこんな感じになりました。
PrintStringのノードの位置001
一番最初の「Print String」(最下段)は普通に「Hello」と出力されているのですが
二番目の「Hello」はその上にどのアセットなのかの情報が追加されて文字が出力されています。

一人で作っているときはあまり役に立つことはなさそうですが、
多人数で再制作している場合など、誰かが出力した「Print String」がある。みたいな場合などには使えるのかなーと。

こういったちょっとしたデバッグ機能もあると嬉しいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 アニメーションモンタージュ(Animation Montage)で再生するスロット(Slot)を変更する(Slot name)

アニメーションモンタージュ(Animation Montage)で再生するスロット(Slot)を変更する方法です。

公式ドキュメントはこちら。

・アニメーション スロット(Animation Slots)
https://docs.unrealengine.com/5.0/ja/animation-slots-in-unreal-engine/

スロットを変更する、またはスロットをモンタージュに追加するには、
スロット トラックの [Slot (スロット)] ドロップダウン メニューをクリックして、次のコマンドを表示します。


というわけでやってみます。
「アニメーションモンタージュ(Animation Montage)」アセットを開きます。
赤枠の部分をクリックして「スロット名」から変更したいスロットを選択します。
アニメーションモンタージュスロット切り替え000

これだけで変更することができます。簡単ですね!
こちらも初歩的なところですが、備忘録としてのメモということで…。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 アニメーションモンタージュ(Animation Montage)でスロット(Slot)を追加する(Anim Slot Manager、Add Slot)

アニメーションモンタージュ(Animation Montage)でスロット(Slot)を追加する方法です。

公式ドキュメントはこちら。

・アニメーション スロット(Animation Slots)
https://docs.unrealengine.com/5.0/ja/animation-slots-in-unreal-engine/

スロットは アニメーション スロット マネージャー で作成し、管理します。
これは アニメーション ブループリント、スケルトン、アニメーション シーケンス の各エディタから開けるパネルです。

とのことで、アニメーションモンタージュ(Animation Montage)でスロット(Slot)を追加するには
「アニメーション スロット マネージャー(Anim Slot Manager)」を使う必要があります。

今回はなんでもよいのでアニメーションシーケンスアセットを開きます。
開いたウィンドウのメニューから「ウィンドウ」の「アニメーションスロットマネージャー(Anim Slot Manager)」を選択します。
アニメーションモンタージュスロット追加000

すると、ウィンドウ右下あたりに「アニメーションスロットマネージャー(Anim Slot Manager)」ウィンドウが開きます。
今回はスロットを追加するので「スロットを追加(Add Slot)」を選択します。
アニメーションモンタージュスロット追加001

追加したいスロット名を入力して決定します。
アニメーションモンタージュスロット追加002
今回は「LowerBody」というスロット名にしてみました。

するとこんな感じでスロットが追加されました。
アニメーションモンタージュスロット追加003
無事「LowerBody」というスロットが追加されているようです。

というわけで、かなり初歩的なところなのですが備忘録としてのメモということで…。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 アニメーションモンタージュ(Animation Montage)の「BlendIn」と「BlendOut」の仕様について

アニメーションモンタージュ(Animation Montage)の「BlendIn」と「BlendOut」の仕様についてです。

こちらに調べてくださった記事があったのでメモです。

・[Animation] Montageの BlendIn / BlendOut の仕様
https://zenn.dev/aziogroup/scraps/5326994431719e#comment-36d765cf5d014c

MontageA再生中に違うMontageBが呼ばれた場合は
MontageAのBlendOutは使用されずにMontageBのBlendInが使用
される

※MontageA BlendingOut時にMontageBを再生した場合1フレだけスロットに接続されてるポーズがブレンドされるのであまりにBlendOutが短いと変なブレンドになる可能性がある


アニメーションモンタージュ(Animation Montage)周りは最近触り始めたばかりで、
あまり細かい仕様については理解していなかったのでこういう情報は助かります…!

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 アニメーションモンタージュ(Animation Montage)全体をループ再生する(Montage Sections Panel)

アニメーションモンタージュ(Animation Montage)全体をループ再生する方法です。

公式ドキュメントはこちら。

・アニメーションモンタージュ(Animation Montage)
https://docs.unrealengine.com/5.1/ja/animation-montage-in-unreal-engine/

アニメーションモンタージュ(Animation Montage)全体をループ再生するには
モンタージュセクションパネル(Montage Sections Panel)で設定するようです。

まずはこんな感じでアニメーションモンタージュアセットを開きます。
アニメーションモンタージュのループ再生000

右下にある「モンタージュセクションパネル(Montage Sections Panel)」に移動し、
チェックボックスを選択してループ再生を設定したいセクション名を指定します。
アニメーションモンタージュのループ再生001

するとこんな感じでチェックボックスがループ再生のマークに変わります
アニメーションモンタージュのループ再生002

これでアニメーションモンタージュ全体のループ再生の設定は完了です。
セクションが複数ある場合はセクションごとに設定できるようですが、
今回は全体なので自動で作成されるデフォルトスロットに対して設定を行いました。

アニメーションモンタージュは再生時ではなく、アセットの方にパラメータを持っていることが多いので
ここらへんは覚えておきたいところですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 2023/05 の無料マーケットプレイスコンテンツと永続コンテンツ(無料の永続コンテンツはなし)

2023/05 の無料マーケットプレイスコンテンツと永続コンテンツのメモです。

公式情報はこちら。

・2023年05月の無料マーケットプレイスコンテンツ
https://www.unrealengine.com/ja/blog/featured-free-unreal-marketplace-content-may-2023

無料コンテンツについては期日がすぎると無料でなくなるので公式情報や他のサイトさんを見たほうが良いかと思います。
こちらでは永続コンテンツについてのメモを残しておきます。

と思ったのですが2023/05は無料の永続コンテンツはないようです。残念…。
とはいえ期限ありの無料コンテンツでダウンロードできるのでそれだけでもとても助かります!

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5 C++で文字列を画面とログの両方に表示する(UKismetSystemLibrary::PrintString)

C++で文字列を画面とログの両方に表示する方法です。

といってもBPでよく使っている「PrintString」をC++から実行するだけのメモになります。
C++で「PrintString」を使う場合「UKismetSystemLibrary::PrintString」関数を使います。

公式ドキュメントはこちら。

・UKismetSystemLibrary::PrintString
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Kismet/UKismetSystemLibrary/PrintString/
微妙に古い…。

実際の記述はこんな感じになります。

// Include
#include "kismet/KismetSystemLibrary.h"

// 文字列を画面とログの両方に表示する
FString aString("C++でPrintString")
FLinearColor aColor(0.0f, 0.5f, 1.0f, 1.0f);
UKismetSystemLibrary::PrintString(WorldContextObject, aString, true, true, aColor, 5.0f, NAME_None);

「WorldContextObject」には「WorldContextObject」を指定します。
「InString」には「表示したい文字列」を指定します。
「bPrintToScreen」には「画面上に表示するかどうか」を指定します。
「bPrintToLog」には「ログに表示するかどうか」を指定します。
「TextColor」には「文字列のカラー」を指定します。
「Duration」には「表示時間」を指定します。
「Key」には「キー」を指定します。

実行してみた結果がこちら。
プログラムでPrintString000
問題なく表示されているようです。

あまりC++からは使わない気もしますが、念のため覚えておいた方が良いかなというところでしょうか。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++でコンストラクションスクリプト(Construction Script)を使ってアクター(Actor)のラベル名を変更する(SetActorLabel)

C++でコンストラクションスクリプト(Construction Script)を使ってアクター(Actor)のラベル名を変更する方法です。

こちらを参考にさせていただきました。

・[UE4] アクターのラベル名を自動変更する機能の実装方法
https://historia.co.jp/archives/14654/

アクター(Actor)のラベル名を変更するには「SetActorLabel」関数を使うようです。
というわけでコンストラクションスクリプト(Construction Script)を使ってラベル名を変更してみます。

// コンストラクション
void AActor::OnConstruction(const FTransform& Transform)
{

Super::OnConstruction(Transform);
#if WITH_EDITOR
// ラベル名変更
FString aLabelString = FString("NewActorLabelName");
this->SetActorLabel(aLabelString);
#endif
}


これでアクターのラベル名を変更することができました。

何かしらの規則に従ったラベル名にしたいなどがある場合は使う機会があるのかなと思います。

注意点としては以下のようなことがあるようです。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT