Editor UtilityでCollision Presetを任意の物に変更し保存をしたい

Unreal Engine 5.3でEditor Utilityを用いてコンテンツブラウザ内で複数選択したStatic Meshのコリジョンプリセットを任意の物に一括で変更し、保存するようにしたいのですがどのように組めばいいでしょうか。
Loop以降で詰まっている状態です…

インゲームで変更したいというわけではなく、多くのアセットのこまとめて変更をかけたいと思っております。

お手数をおかけしますがよろしくお願いします。

FBodyInstanceCustomization::UpdateCollisionProfile()やFBodyInstanceCustomization::AddCollisionCategoryを見ると参考になります
このコードをコピーして、BPでは画像のように組んでみてください

h側

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "StaticMeshEUB.generated.h"

UCLASS()
class MYPROJECT_API UStaticMeshEUB : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()
public:
    UFUNCTION(BlueprintPure = false, Category = "StaticMeshEUB")
    static void SetCollisionProfileName(UStaticMesh* StaticMesh, FName CollisionPresetName);
};

cpp側

// Fill out your copyright notice in the Description page of Project Settings.

#include "StaticMeshEUB.h"
#include "PhysicsEngine/BodySetup.h"

void UStaticMeshEUB::SetCollisionProfileName(UStaticMesh* StaticMesh, FName CollisionPresetName)
{
    if (IsValid(StaticMesh))
    {
        UBodySetup* BodySetup = StaticMesh->GetBodySetup();
        FBodyInstance& BodyInstance = BodySetup->DefaultInstance;
        BodyInstance.SetCollisionProfileName(CollisionPresetName);
        UPackage* Package = StaticMesh->GetOutermost();
        (void)(Package->MarkPackageDirty());
    }
}

少なくとも私はそれで行けました

1 Like

回答ありがとうございます!
記載していただいたコードはコピー後に何かした方がよろしいでしょうか?

BPについて記載しただいた画像のように組んでいたのですがで初歩的な部分で詰まってしまいました。
Cast to StaticMeshのAs StaticMeshかSet Collision Prifile NameのTargetへどうすれば接続できるのでしょうか。

お手数をおかけしますがよろしくお願いします。

コードをコピーしたらビルドしてください
ビルドの手順はドキュメントに記載があります

そのBPではPrimitiveComponentを引数に受け取るSetCollisionProfileName関数につなげようとしていますね
ビルドが終わったらStaticMeshを引数に取るSetCollisionProfileNameというノードが新たに利用可能になりますから、それを使うと期待の動作になるのではないでしょうか

1 Like

ありがとうございます!

何度もすみません。普段はアーティストとして活動していましてコード周りの部分に疎いところがありまして、コードをコピーしてからビルドするまでがよくわかっていない状態です。

可能でしたらやり方を教えていただいてもよろしいでしょうか。
BP内で完結できると見誤っていました。

お手数お掛けしますがよろしくお願いします。

では、こちらからVisualstudioCommunityをダウンロードし、インストール作業を終えます
そしたら、前提条件をそろえるために、空のプロジェクトを5.3で作成してください(EpicGames Launcher > UE5.3 > Games > Blankテンプレート 設定はいじらず)
次に、UEプロジェクトの上部メニュー > Tools > New C++ Class… > All Classes > Seardch… > BlueprintFunctionLibraryと検索 > 出てきたやつをクリック > Next > Name欄にStaticMeshEUB > CreateClass > 待つ > OK > Yes > (VisualStudioが開きます) > UEプロジェクトの方を閉じる
次に、VisualStudioの方でソリューションエクスプローラーを探します(表示 > ソリューションエクスプローラー) > StaticMeshEUB.hを見つけて h側コードをコピペ > MYPROJECT_APIの部分を{プロジェクト名全大文字_API}という文字列に置き換え > StaticMeshEUB.cppを見つけて cpp側コードをコピペ > 上部メニューの三段目あたりを確認 (それぞれのコンボボックスの要素がDevelopment Editor, Win64, 自分のプロジェクト名となるように) > Local Windows DebuggerというボタンもしくはF5でビルド
ビルドが成功したら空のプロジェクトが開きます、あとはBPを組みます
空のプロジェクトで成功したら、本番のプロジェクトの方にも入れてみてください
5.4でも同じ手順でうまくいく可能性はあります

1 Like

できました!
懇切丁寧にありがとうございます!!

これで効率化が図れそうです!!

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.