fc2ブログ

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

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

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

| PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++でデータテーブル(Data Table)の名前(ID)をすべて取得する(UDataTable、Get Row Names)

C++でデータテーブル(Data Table)の名前(ID)をすべて取得する方法です。

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

・Get Data Table Row in c++
https://forums.unrealengine.com/t/get-data-table-row-in-c/143296

TArray RowNames = YourDataTable->GetRowNames();


抜粋すると上記のように「Get Row Names」関数を使って取得するようです。

実際のコードはこんな感じになります。

// データテーブルから名前(ID)をすべて取得
TObjectPtr< UDataTable> aDataTable;
TArray< FName> aNames = aDataTable->GetRowNames();

// 内容を確認
for(auto aName : aNames){

UE_LOG(LogTemp, Log, TEXT("%s"), (*aName.ToString()));
}


おそらくはデバッグ機能ぐらいでしか使わない気もしますがとりあえずメモということで。

こういった細かい関数についてもすぐでてくるよう覚えておきたいですね。

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

≫ EDIT

UE5/UE4 C++でアクター(Actor)が持つコンポーネント(Component)をクラス(Class)を指定して取得する(GetComponentByClass、GetComponentsByClass、UComponent::StaticClass)

C++でアクター(Actor)が持つコンポーネント(Component)をクラス(Class)を指定して取得する方法です。

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

・UE4 コンポーネント取得 子供オブジェクト取得
https://qiita.com/yukimm123/items/9623a3ace7f7f32a2c53

コンポーネントの取得は「GetComponentByClass()」関数を使います。

// アクターのコンポーネントを一つ取得
TObjectPtr< AActor> aActor;
TObjectPtr< UActorCompoent> aComponent = aActor->GetComponentByClass(UNewComponent::StaticClass());

こんな感じで「Actor」が持つ「Component」を一つだけ取得することができます。
取得したいクラスを「UComponent::StaticClass()」で引数に指定します。

全て取得したい場合は「GetComponentsByClass()」関数を使います。

// アクターのコンポーネントをすべて取得
TObjectPtr< AActor> aActor;
TArray< TObjectPtr< UActorCompoent>> aComponents = aActor->GetComponentsByClass(UNewComponent::StaticClass());

こんな感じで「Actor」が持つ「Component」をすべて取得することができます。

取得したコンポーネントは「UActorCompoent」になっているため、使う場合はキャストを行います、

// 取得したクラスにキャストする
TObjectPtr< UNewComponent> aNewComponent = Cast< UNewComponent>(aComponent);


結構使う頻度は多いと思うので基礎的なことですが覚えておきたいところです。

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

≫ EDIT

UE5/UE4 C++で配置されているすべてのアクター(Actor)から特定クラスのアクター(Actor)を取得する(UGameplayStatics::GetAllActorsOfClass、AActor::StaticClass)

C++で配置されているすべてのアクター(Actor)から特定クラスのアクター(Actor)を取得する方法です。

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

・UE4 c++でLevelに配置されているの他Actorを検索する
https://qiita.com/wisp/items/03c3a1b5483fa0a5e617

配置されているすべてのアクター(Actor)から特定クラスのアクター(Actor)を取得するには
「UGameplayStatics::GetAllActorsOfClass」関数
を使えばいいようです。

というわけで実際にやってみます。

// 指定したクラスのアクターを取得
TArray< TObjectPtr< AActor>> aActorList;
UGameplayStatics::GetAllActorsOfClass(this, ANewActor::StaticClass(), aActorList);

「AActor::StaticClass()」といった特定のクラスを指定することで
そのクラスのアクターリストを取得することができます。

取得したアクターリストは「AActor」のままなので「Cast」をして使うことになります。

// リストのアクターすべて
for(TObjectPtr< AActor> aActor : aActorList){

// 取得したクラスにキャスト
TObejctPtr< ANewActor> aNewActor = Cast< ANewActor>(aActor );
}


処理負荷的にあまり多用するような処理ではありませんが、
なにかしらのタイミングやデバッグ用途で使うタイミングがあるのではないかなと思います。

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

≫ EDIT

UE5/UE4 C++で画面上のエラーや警告関係の文字列表示(デバッグログ)を無効にする(GAreScreenMessagesEnabled、DisableAllScreenMessages、EnableAllScreenMessages)

C++で画面上のエラーや警告関係の文字列表示(デバッグログ)を無効にする方法です。
コンソールコマンドでの「DisableAllScreenMessages」と「EnableAllScreenMessages」の処理ですね。

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

・GAreScreenMessagesEnabled
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Core/GAreScreenMessagesEnabled/

処理的には簡単で「GAreScreenMessagesEnabled」変数をを設定するだけとなります。

// 画面上のログ表示を切り替える(表示する)
GAreScreenMessagesEnabled = true;


「GAreScreenMessagesEnabled」が「true」で「EnableAllScreenMessages」と同じ挙動になります。
「GAreScreenMessagesEnabled」が「false」で「DisableAllScreenMessages」と同じ挙動になります。

こういった処理はコンソールコマンドでいつでもできたりはしますが、
頻繁に使うものがあった場合などには、UI にして使えるようにしてもいいのかなと思いました。

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

≫ EDIT

UE5/UE4 FBXからアニメーションアセットをインポート(スケルトン未指定)する(FBX、Import Animations、Animation Sequence)

FBXからアニメーションアセットをインポート(スケルトン未指定)する方法です。

今回はこちらの「ミライ小町」のデータを使わせていただきました。

・ミライ小町
https://www.miraikomachi.com/download/

Unity のパッケージしてのデータなのですが
アニメーションとしてはFBXが入っているので今回はそちらを使用しました。

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

・FBX を使用してアニメーションをインポートする
https://docs.unrealengine.com/5.0/ja/importing-animations-using-fbx-in-unreal-engine/

今回はスケルトンの指定は行わず、メッシュごとインポートする形で試してみました。
なのでかなりやることはシンプルでした。

まずはFBXファイルをコンテンツブラウザにドラッグ&ドロップします。
アニメーションインポート000
「Import Animations」にチェックをいれます。
「Animation Length」はそのままでも大丈夫そうです。
「Skeleton」を指定するとそのスケルトンに対してのアニメーションアセットになると思われますが
今回は新規にインポートして、使う場合はリターゲティングする想定なので未指定でいきます。

設定を確認したら「全てインポート」ボタンを押すとインポートがはじまります。
結果はこんな感じに。
アニメーションインポート001
メッシュやスケルトンやマテリアルもインポートされていますが、
アニメーションシーケンスもちゃんとインポートされているようです。

今回はインポートにスケルトンの指定を行っていないので、
インポートされたスケルトンを使って、インポートされたアニメーションシーケンスの確認ができると思います。

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

≫ EDIT

UE5 「Meta Sound」の「Meta Sound(Meta Sound ソース)」アセットの音量(ボリューム)を調整する(Meta Sound Source、Volume)

「Meta Sound」の「Meta Sound(Meta Sound ソース)」アセットの音量(ボリューム)を調整する方法です。

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

・【UE5】新しいオーディオシステム『MetaSound』
https://shuntaendo.hatenablog.com/entry/2021/05/27/181106#%E5%85%A8%E4%BD%93%E8%A8%AD%E5%AE%9A

「Meta Sound(Meta Sound ソース)」アセットの音量を調整はアセットのパラメータでできるようです。
アセットを開いて「ソース」という歯車の付いたメニューをクリックします。
メタサウンドのボリューム変更000

開いた詳細で「Volume」を設定してあげます。
メタサウンドのボリューム変更001
「1.0」が通常ですね。音量を半分にしたい場合は「0.5」を指定する感じだと思います

これで無事音量が変更できました。
再生するときではなくアセットの設定なので、全体の音量を変更するのはまた別の方法かと思います。

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

≫ EDIT

UE5/UE4 BPで「AnimNotify」や「AnimNotifyState」アセットを作成したときに、BPの中で作成した変数に値をセットするとエラーになったりセットできない場合の対処方法(C++で実装する)

BPで「AnimNotify」や「AnimNotifyState」アセットを作成したときに、BPの中で作成した変数に値をセットするとエラーになったりセットできない場合の対処方法です。

参考にさせていただいたサイトはこちら。

・[UE4] 独自のAnimation Notifyの実装方法
https://historia.co.jp/archives/8643/

特に難しい処理ではないのでBPで「AnimNotifyState」のアセットを作りました。
BPのNotifyの変数がセットできない002

BPの中で内部処理に必要な変数を作りました。
BPのNotifyの変数がセットできない000

この変数に対して値をセットしようとしたら何故かエラーに…。
BPのNotifyの変数がセットできない001

よくわからなかったので調べてみるとこちらのサイトさんに書かれていました。

・[UE4] 独自のAnimation Notifyの実装方法
https://historia.co.jp/archives/8643/

BPで上書きできる関数はすべてconst 関数となっているためメンバ変数を編集することはできないのでC++で実装する必要があります。

ということのようです…。変数にセットしたい場合はC++での実装が必要のようですね。

こういうのも知ってないと悩んでしまうので覚えておきたいですね。

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

≫ EDIT

UE5 猫でも分かるUE5.0, 5.1におけるアニメーションの新機能について

猫でも分かるUE5.0, 5.1におけるアニメーションの新機能についてです。

「CEDEC+KYUSHU」の以下の講演の資料が公開されたのでメモです。

・猫でも分かるUE5.0, 5.1におけるアニメーションの新機能について


講演でも動画を流されていたのですが、こちらもパワーポイントのファイルであれば見れるようです。
・猫でも分かる UE5.0, 5.1 におけるアニメーションの新機能について【CEDEC+KYUSHU 2022】.pptx

UE5ではアニメーション関連で様々な機能が追加されているので
こういった機能を網羅して説明してくれる資料は本当に助かります!

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

≫ EDIT

UE5 「Enhanced Input」で入力軸の値を指定した順番(Order)で入れ替える(Swizzle Input Axis Values、Modifiers、Input Action、Input Mapping Context)

「Enhanced Input」で入力軸の値を指定した順番(Order)で入れ替える方法です。

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

・UE4.26 Enhanced Inputについて
https://unrealengine.hatenablog.com/entry/2020/11/28/192500

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

・Enhanced Input プラグイン
https://docs.unrealengine.com/4.26/ja/InteractiveExperiences/Input/EnhancedInput/

「Enhanced Input」で入力軸の値を指定した順番(Order)で入れ替えるには
「Modifiers」で「Swizzle Input Axis Values」を設定
します。
「Modifiers」については「Input Action」と「Input Mapping Context」アセットの両方で設定できるので
用途に合わせて使い分けるで良いのではないかなと思います。

実際に設定してみるとこんな感じになります。
入力の値の並び順を変更する000
「Modifiers」を追加して「Swizzle Input Axis Values」を設定してみました。
「XYZ」の順番を自由に入れ替えることができます。

これをどういう用途で使うのかはあまり想像できてないのですが、
「Enhanced Input」はこういった細かい設定がアセットで設定できるのが嬉しいですね。

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

≫ EDIT

UE5 「Enhanced Input」で入力の値に特定の値を掛けてスケールする(Scalar、Modifiers、Input Action、Input Mapping Context)

「Enhanced Input」で入力の値に特定の値を掛けてスケールする方法です。

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

・UE4.26 Enhanced Inputについて
https://unrealengine.hatenablog.com/entry/2020/11/28/192500

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

・Enhanced Input プラグイン
https://docs.unrealengine.com/4.26/ja/InteractiveExperiences/Input/EnhancedInput/

「Enhanced Input」で入力の値に特定の値を掛けてスケールするには「Modifiers」で「Scalar」を設定します。
「Modifiers」については「Input Action」と「Input Mapping Context」アセットの両方で設定できるので
用途に合わせて使い分けるで良いのではないかなと思います。

実際に設定してみるとこんな感じになります。
入力の値を掛ける000
「Modifiers」を追加して「Scalar」を設定してみました。
「XYZ」それぞれに対して掛ける値を設定してスケールすることができます。

これをどういう用途で使うのかはあまり想像できてないのですが、
「Enhanced Input」はこういった細かい設定がアセットで設定できるのが嬉しいですね。

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

| PAGE-SELECT | NEXT