fc2ブログ

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

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

2022年08月 | ARCHIVE-SELECT | 2022年10月

| PAGE-SELECT | NEXT

≫ EDIT

UE5 パッケージ化するとライティングが入ったような発光したような画面になってしまう場合の対処方法(露出補正)

パッケージ化するとライティングが入ったような発光したような画面になってしまう場合の対処方法についてです。

下記の症状とそれに対する対応のメモになります。

対応としては以下のようにすると直ったようです。

とりあえず備忘録みたいなメモということで…。

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

≫ EDIT

UE5/UE4 変数の値が有効かどうか(nullptrでないか)をチェックする(Is Valid)

変数の値が有効かどうか(nullptrでないか)をチェックする方法です。

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

・【UE4・UE5】〈Tips〉諦めないで!分かりづらいブループリントノード集&知ってると幸せになれる小技
https://namiton.hatenablog.jp/entry/2022/09/15/144430#%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88%E3%83%87%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88

変数の値が有効かどうかをチェックするには「Is Valid」ノードを使います。
IsValid001.jpg
「Object」が有効(nullptr でなければ)「Return Value」に「True」が返ります。

実際に使ってみるとこんな感じになります。
IsValid003.jpg
「Return Value」を「Branch」ノードでチェックする感じですね。

「Is Valid」ノードは有効な場合と無効な場合に「Branch」ノードを使わずに分岐できるマクロも存在します。
IsValid000.jpg
使い方は一緒で、有効な場合は「Is Valid」を実行。無効な場合は「Is Not Valid」が実行されます。

使い方はこんな感じになります。
IsValid002.jpg

とちらを使ってもよい気がしますが、BPがわかりやすいようにしたいですね。

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

≫ EDIT

UE5 BPでナイアガラシステム(Niagara System)で再生したエフェクト(Naiagara Particle System Component)をアクティブにする(Activate、Set Active、Naiagara Particle System Component)

BPでナイアガラシステム(Niagara System)で再生したエフェクト(Naiagara Particle System Component)をアクティブにする方法です。

エフェクトの「Auto Activate」が「False」になっている場合は手動でアクティブにする必要があります。

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

・[UE4] Spawn Emitter~ノードの Pooling Method って何? -エフェクト用Object Pool機能について-
https://qiita.com/EGJ-Kaz_Okada/items/7672e29e0fd96bec643c

ナイアガラシステム(Niagara System)で再生したエフェクトをアクティブにするには「Activate」ノードを使います。
ナイアガラシステムをアクティブにする001
「Target」には「Niagara Particle System Component」を指定します。
「Reset」はアクティブにするときに最初から実行するかを指定します。

「Niagara Particle System Component」は
「Spawn System at Location」ノードなどでエフェクトを発生させた返り値となります。
ナイアガラシステムの再生000
これの「Return Value」が「Niagara Particle System Component」となります。

実際に使ってみるとこんな感じになります。
ナイアガラシステムをアクティブにする003
「Niagara Particle System Component」を渡す感じですね。

上記「Activate」ノードは「Set Active」ノードでも代用できるようです。
ナイアガラシステムをアクティブにする000
「Target」には「Niagara Particle System Component」を指定します。
アクティブにする場合は「New Active」に「True」を指定します。
「Reset」はアクティブにするときに最初から実行するかを指定します。

実際に使ってみるとこんな感じになります。
ナイアガラシステムをアクティブにする002

変数でアクティブ状態を管理したい場合などは、こっちを使ったほうがすっきりするのかなと思いました。

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

≫ EDIT

UE5 BPでナイアガラシステム(Niagara System)で再生したエフェクト(Naiagara Particle System Component)を終了(非アクティブに)する(Deactivate、Set Active、Naiagara Particle System Component)

BPでナイアガラシステム(Niagara System)で再生したエフェクト(Naiagara Particle System Component)を終了(非アクティブに)する方法です。

エフェクトがループ再生になっている場合は手動で終了させる必要があります。

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

・[UE4] Spawn Emitter~ノードの Pooling Method って何? -エフェクト用Object Pool機能について-
https://qiita.com/EGJ-Kaz_Okada/items/7672e29e0fd96bec643c

ナイアガラシステム(Niagara System)で再生したエフェクトを終了(非アクティブに)するには
「Deactivate」ノード
を使います。
ナイアガラシステムを非アクティブにする000
「Target」には「Niagara Particle System Component」を指定します。

「Niagara Particle System Component」は
「Spawn System at Location」ノードなどでエフェクトを発生させた返り値となります。
ナイアガラシステムの再生000
これの「Return Value」が「Niagara Particle System Component」となります。

実際に使ってみるとこんな感じになります。
ナイアガラシステムを非アクティブにする001
「Niagara Particle System Component」を渡す感じですね。

気を付けることと言えば、「Deactivate」ノードで終了するのはどうもエミッターだけのようで
すでに実行が始まっているパーティクルについては瞬時に消えることはないということでしょうか。

上記「Deactivate」ノードは「Set Active」ノードでも代用できるようです。
ナイアガラシステムをアクティブにする000
「Target」には「Niagara Particle System Component」を指定します。
終了する場合は「New Active」に「False」を指定します。
「Reset」は終了する場合は特に気にする必要はなさそうです。

実際に使ってみるとこんな感じになります。
ナイアガラシステムをアクティブにする002

変数でアクティブ状態を管理したい場合などは、こっちを使ったほうがすっきりするのかなと思いました。

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

≫ EDIT

UE5 BPでナイアガラシステム(Niagara System)アセットを使ってエフェクトを再生する(Niagara System、Spawn System at Location、Spawn System Attached)

BPでナイアガラシステム(Niagara System)アセットを使ってエフェクトを再生する方法です。

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

・Spawn System at Location
https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Niagara/SpawnSystematLocation/

BPでナイアガラシステム(Niagara System)アセットを再生するには
「Spawn System at Location」ノードか「Spawn System Attached」ノードを使います。

・Spawn System at Locationノード。
ナイアガラシステムの再生000
「System Template」にはナイアガラシステム「Niagara System」アセットを指定します。
「Location」「Rotation」「Scale」には位置、回転、スケールを指定
します。
「Auto Destroy」は自動で消滅するかどうかを指定します。
「Auto Active」]はスポーン時に自動でアクティブになって再生されるかを指定します。
「Pooling Method」と「Pre Cull Check」はいまいちよくわからないですね…。

「Pooling Method」についてはこちらが参考になるかもしれません。

・[UE4] Spawn Emitter~ノードの Pooling Method って何? -エフェクト用Object Pool機能について-
https://qiita.com/EGJ-Kaz_Okada/items/7672e29e0fd96bec643c

コンポーネントにアタッチする場合は「Spawn System Attached」ノードが使えるようです。
ほとんどのパラメータは「Spawn System at Location」と同じですね。

・Spawn System Attachedノード。
ナイアガラシステムの再生001
「System Template」にはナイアガラシステム「Niagara System」アセットを指定します。
「Location」「Rotation」には位置、回転を指定します。
「Location Type」にはアタッチする位置の設定を指定します。
「Auto Destroy」は自動で消滅するかどうかを指定します。
「Auto Active」]はスポーン時に自動でアクティブになって再生されるかを指定します。
「Pooling Method」と「Pre Cull Check」はいまいちよくわからないですね…。

実際に再生するのはこんな感じで試してみました。
ナイアガラシステムの再生002
キャラクターの位置にエフェクトをスポーンする。といった処理ですね。

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

無事エフェクトが再生されているようですね。

まずは基本中の基本でしたが、こんな感じで簡単に再生できるのは嬉しいですね。

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

≫ EDIT

UE5/UE4 アニメーションモンタージュ(Animation Montage)を再生するとステートマシン(State Machines)が停止してリセットされてしまう問題を解決する(Slot、Always Update Source Pose)

アニメーションモンタージュ(Animation Montage)を再生するとステートマシン(State Machines)が停止してリセットされてしまう問題を解決する方法です。


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

・Animation Montage の概要(Animation Montage Overview)
https://docs.unrealengine.com/4.27/ja/AnimatingObjects/SkeletalMeshAnimation/AnimMontage/Overview/

アニメーションモンタージュを再生しつつ、ステートマシンで制御するためにこんな感じでノードを組みました。
アニメーションモンタージュを再生する000
普通の使い方だと思います。おそらく…。

このアニメーションブループリントで、アニメーションモンタージュを再生すると終了後に、
接続しているステートマシンがリセットされて最初から実行されてしまう。

といった問題が発生しました。

調べてもでてなく、みなさんどうやってるんだろうと困っていたのですが、
「Slot」の詳細に「Always Update Source Pose」という項目があり、
チェックを入れるとステートマシンが常に動くようになりました。

まずは「Slot」を選択します。
アニメーションモンタージュを再生する001

詳細の「Always Update Source Pose」にチェックを入れます。
アニメーションモンタージュを再生する002
これでモンタージュ再生後にステートマシンがリセットされることはなくなりました。

ただ、これだとモンタージュ再生中もステートマシンは常に動き続ける(評価される)ので
ステートの方の制御は気を付けないといけないかもです。

デフォルトでは「Always Update Source Pose」にチェックは入っていないので気づきそうなものですが
ステートマシンの最初が待機(Idle)みたいなもので、モンタージュ再生後に待機に戻る。みたいなつくりになっていると
動作としては特に問題ない(おそらくやりたいことと結果が同じ)ので気づきにくいのかなーと。

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

≫ EDIT

UE5/UE4 アニメーションブループリント(Animation Blueprint)でアニメーションモンタージュ(Animation Montage)を再生できるように下準備をする(Montage、Slot)

アニメーションブループリント(Animation Blueprint)でアニメーションモンタージュ(Animation Montage)を再生できるように下準備をする方法です。

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

・Animation Montage の概要(Animation Montage Overview)
https://docs.unrealengine.com/4.27/ja/AnimatingObjects/SkeletalMeshAnimation/AnimMontage/Overview/

アニメーションモンタージュ(Animation Montage)を再生するには
アニメーションブループリント(Animation Blueprint)で「Slot」を作成してノードをつないであげる
必要があります。
アニメーションモンタージュを再生する000
上記の「Slot」がない場合は、モンタージュを再生しても何も反応がないものになります。

ただモンタージュを再生する場合は、「Slot」の名前は上記のように「DefaultSlot」で問題なさそうです。

とりあえず上記のようにノードを接続しておけばアニメーションモンタージュの再生結果を反映することができます。

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

≫ EDIT

UE5 「Gameplay Ability System」の「Gameplay Ability」でアニメーションモンタージュ(Animation Montage)を再生する(GameplayAbility、Play Montage And Wait)

「Gameplay Ability System」の「Gameplay Ability」でアニメーションモンタージュ(Animation Montage)を再生する方法です。

「Gameplay Ability System」についてはこちらが参考になると思います。

・【UE4】Gameplay Ability System を使い始めたい人向けの情報
https://qiita.com/sentyaanko/items/314ee39feb62ce67b885

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

・ゲームプレイ アビリティ システム(Gameplay Ability System)
https://docs.unrealengine.com/4.27/ja/InteractiveExperiences/GameplayAbilitySystem/

こちらのサイトがすごいわかりやすくシンプルな説明になっていたので参考にさせていただきました。

・【UE5】GamePlayAbilitySystemによるコンボ攻撃の実装とそれに利用する小ネタ 前編【GAS】
https://lunanelis.hatenablog.com/entry/2022/06/07/023141

「Gameplay Ability」でアニメーションモンタージュ(Animation Montage)を再生するには
「Play Montage And Wait」ノード
を使います。
GameplayAbility003.jpg
「Task Instance Name」についてはよくわからないので調べ中です。
「Montage to Play」には再生したいアニメーションモンタージュを指定します。
「Rate」には再生レートを指定します。
「Start Section」はアニメーションモンタージュで再生するセクションを指定します。
「Stop when Ability Ends」についてはよくわからないので調べ中です。
「Anim Root Motion Translation Scale」はルートモーションの移動量の係数を指定します。
「Start Time Seconds」は再生開始位置を指定します。

実際に使ってみるとこんな感じになります。
GameplayAbility001.jpg
「Play Montage And Wait」でアニメーションモンタージュを再生。
最後まで再生されるか、中断された場合に「End Ability」を実行して終了
となります。

基本的な「Gameplay Ability」によるアニメーションの再生はこんな感じでいけそうです。
参考サイトにもあるようなコンボなどを作る場合には色々と処理が必要になると思うのですが
とりあえず単発で「Gameplay Ability」を実行する分にはこれで問題なさそうな気がします。

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

≫ EDIT

UE5/UE4 C++で構造体(FVector、FVector2D、FRotator、FLinearColor)を「FString」型の文字列に変換する(FString::ToString)

C++で構造体(FVector、FVector2D、FRotator、FLinearColor)を「FString」型の文字列に変換する方法です。

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

・FString
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/

「FVector」型を「FString」型の文字列に変換するには「FString::ToString」関数を使います。

FVector aVector(0.0f, 1.0f, 2.0f);
FString aStringVector = aVector.ToString();
// ログに表示
UE_LOG(LogTemp, Log, TEXT("%s"), (*aStringVector));


「FVector2D」型を「FString」型の文字列に変換するには「FString::ToString」関数を使います。

FVector2D aVector2D(3.0f, 4.0f);
FString aStringVector2D = aVector2D.ToString();
// ログに表示
UE_LOG(LogTemp, Log, TEXT("%s"), (*aStringVector2D));


「FRotator」型を「FString」型の文字列に変換するには「FString::ToString」関数を使います。

FRotator aRotator(1.0f, 2.0f, 3.0f);
FString aStringRotator = aRotator.ToString();
// ログに表示
UE_LOG(LogTemp, Log, TEXT("%s"), (*aStringRotator));


「FLinearColor」型を「FString」型の文字列に変換するには「FString::ToString」関数を使います。

FLinearColor aLinearColor(1.0f, 0.75f, 0.5f, 0.25f);
FString aStringLinearColor = aLinearColor.ToString();
// ログに表示
UE_LOG(LogTemp, Log, TEXT("%s"), (*aStringLinearColor));


こんな感じで結局すべて「ToString」関数を使えば「FString」型に変換することができます。

上記のログの結果はこんな感じになりました。
構造体を文字列に変換000

こんな感じで「FString」型には色々な変換機能があるので使うと便利なのかなと思います。

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

≫ EDIT

UE5/UE4 C++で「FString」型の文字列を値(bool、int32、float)に変換する(FString::ToBool、FCSTring::Atoi、FCSTring::Atof)

C++で「FString」型の文字列を値(bool、int32、float)に変換する方法です。

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

・FString
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/

「FString」型の文字列を「bool」に変換するには「FString::ToBool」関数を使います。

FString aStringBool("true");
bool aBoolValue = aStringBool.ToBool();
// ログに表示
UE_LOG(LogTemp, Log, TEXT("BoolValue = %s"), aBoolValue ? TEXT("true") : TEXT("false"));


「FString」型の文字列を「int32」に変換するには「FCString::Atoi」関数を使います。

FString aStringInt("123456");
int32 aIntValue = FCString::Atoi(*aStringInt);
// ログに表示
UE_LOG(LogTemp, Log, TEXT("IntValue = %d"), aIntValue);

「FCString」なので注意です。

「FString」型の文字列を「float」に変換するには「FCString::Atof」関数を使います。

FString aStringFloat("789.0123");
float aFloatValue = FCString::Atof(*aStringFloat);
// ログに表示
UE_LOG(LogTemp, Log, TEXT("FloatValue = %f"), aFloatValue);

こちらも「FCString」なので注意です。

上記ログの結果はこんな感じになりました。
文字列を数値に変換000

こんな感じで「FString」型には色々な変換機能があるので使うと便利なのかなと思います。

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

| PAGE-SELECT | NEXT