あっぷあっぷブログ

UnrealEngine(ゲーム用途)関連の備忘録です。

【UE5/Editor】Class参照からAssetDataを取得

クラス参照からどうやってAssetData取得するんだ?となったのでメモ。

Get Soft Class PathGet Asset By Object Pathに繋ぎます。
これでPackage Path等が取得できました。

似たノードにGet Asset by Object Path というノードがありましたが、こちらは使用していません。ノード名はほとんど一緒ですね。Byの頭文字が大文字か小文字かしか違いがないです。

【UE5】DataTableの中身のデータが壊れる場合

DataTableに複雑な構造体を使用した場合、データが壊れることがあります。複雑な構造体とは、構造体Aの中に構造体Bの配列があったりとかです。

例えば、構造体に変数を追加したり変数の型を変更した後に、コンパイルエラーのような現象が発生し、DataTableに設定してあった値がすべて消し飛ぶようなことが起きたりします。

構造体が入れ子になっていて、子要素の構造体に変数を追加した時など、よく壊れる印象です。

解決策になりそうな議論

forums.unrealengine.com

ここではDataTableとDataAssetの比較に関する面白い内容が語られています。 その意見の中に、BPの構造体は壊れやすいという意見や、C++の構造体の方が安定しているという意見が見られます。

複雑な構造体になりそうならC++で作ってしまった方が良いかもしれませんね。

【UE5/C++】カテゴリーの表示順を変更したい

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA")
FText DescA;

UPROPERTYでカテゴリー設定できますが、継承したBPクラスではカテゴリーの表示順が思うようにいかないことがあります。クラスの最初に宣言したカテゴリーが下の方に表示されるなど。

クラス メタデータ指定子 PrioritizeCategories

meta = (PrioritizeCategories = "カテゴリー名A カテゴリー名B")

ここに記述したカテゴリー名は優先して表示されるみたいです。カテゴリー間はスペース区切り。

参考

benui.ca

使用例

UCLASS(BlueprintType, meta = (PrioritizeCategories = "AAA BBB CCC"))
class USampleAsset : public UPrimaryDataAsset
{
    GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA")
    FText DescA;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BBB")
    FText DescB;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CCC")
    FText DescC;

};

その他

プロパティの並び替えについての参考記事 pafuhana1213.hatenablog.com

【UE5】Overlay Material メモ

Overlay Materialが適用されない??

オーバーレイマテリアルのBlend ModeがOpaqueだったりする場合、オーバーレイマテリアルが適用されていないかのように見えることがあります。

おそらくオーバーレイマテリアルが通常のマテリアルと同じ場所に描画されていて、通常のマテリアルの方が優先的に描画されているのかもしれません。

その場合は、オーバーレイマテリアルの位置をずらすだけで、適用されていることが確認できます。

Overlay Material のパラメーターを変更したい場合

マテリアルインスタンスの作成


Create Dynamic Material Instance ノードは2種類ありますが、左側を使います。

マテリアルインスタンスの適用


Dynamic Material Instance(DMI)を作成し、Set Overlay Material ノードでマテリアルをセットすればDMI経由でパラメーターを変更可能になります。

【UE5/Blender】BlenderからSocket付きStaticMeshをUnrealにエクスポートする

参考

blenderartists.org

Blender上の手順

  • ソケット用にEmptyを追加
  • Emptyの名前をSocket_○○に変更
  • SOCKET_○○をエクスポートするメッシュ(root)の子要素にする

※ エクスポート時にはBlender For Unreal Engine アドオンを使用しています。

アドオンを使って、一番親である「RouteBranch」を選択した状態でエクスポートしています。階層がこんな感じでも上手くいきました。

※上記のやり方でUE5.5で失敗しました。以下のようにしたら上手くいきました。

ソケットの座標や回転を特定の位置に合わせたい場合

位置に関しては頂点スナップでどうにかなりましたが、回転を特定オブジェクトなどに合わせる場合は以下の記事が参考になりました。

rt3dcg.blogspot.com

ソケット用オブジェクト、合わせる用オブジェクト複数選択後(合わせる対象のオブジェクトを最後に選択)、メニューに表示される位置や回転の数値上で右クリックし、Copy All Selectedを使用することで回転や位置調整を行えます。

【UE5】コリジョンを貫通してしまう場合

物理を有効にしたオブジェクトがすり抜ける

コリジョン設定は問題ないはずなのに、跳ね返ってほしい発射物が床や壁をすり抜ける場合があります。その場合、以下の対処で改善する可能性があります。

  • コリジョンの厚みを増やす
  • フレームレートを改善させる

    30fpsと60fpsとでは60fpsの方がコリジョンの検知が正確になります。

  • CCDを使用する

【Zbrush】穴を無理やりふさぐ方法


ダイナメッシュをスカルプトしてる最中に穴が開いてしまうことがありました。
ジオメトリ > トポロジー編集 > 穴閉じ を実行してみましたが、どうにもうまくいきません。

解決方法

そこでMoveブラシでポリゴンを引っ張って無理やり穴の上を覆う状態にします。
この状態でCtrl + ドラッグでリメッシュしてみます。


穴が徐々に塞がっていくので、「穴を覆う > リメッシュ」の流れを繰り返していきます。なんとか穴をふさぐことができました。