参照切れアセットのメタデータ削除についての質問となります

お世話になっております。

UE5.7でサードパーソンテンプレートのプロジェクトを作成すると、

添付画像のように参照先の無くなったアセット情報が残ってしまっています。

アセットの変数に設定できる箇所もなくメタデータにのみ参照情報が残っている状態となっているのですが、

問題のアセットからメタデータを取得したうえで、ObjectMetaDataMapのオブジェクトパスを元にFAssetRegistryModuleから取得したFAssetDataをIsValid()でチェックし、

falseとなっているメタデータを削除しようと思うのですが、この対応は問題ございませんでしょうか?

[Attachment Removed]

お世話になっております。

参照先のなくなったアセットついては、社内でも情報が少なく確定した対処法がない、というのが正直な状況です。ご提示いただいた対処法についても現時点では何とも申し上げにくく、一度こちらで調査させていただきたいのですが、再現方法を教えていただくか、再現プロジェクトを添付していただくことは可能でしょうか?

といいますのも、添付いただいたスクリーンショットから、おそらく「サードパーソンテンプレート」かつ「モバイル」で「SideSchroller」バリアントでプロジェクトを作成されたと判断し、当方でもヴァニラの5.7.4で同様にプロジェクトを作ってみたのですが、同じ参照ビューアの状態を再現できずにおります。​ [Image Removed](目玉アイコン配下のオプションも一通り切り替えて試しました)

​つきましては、切り分けのため以下も併せて教えていただけますと幸いです。

・ご使用のエンジンの正確なバージョン(5.7.x)

・旧バージョンで作成したプロジェクトをアップグレードされたかどうか

・参照ビューアの表示オプションで 「Show Asset Path」 を有効にした際の、「None」ノードのパス

(※表示オプション変更後スクリーンショットの再撮影をお願いします)​

また、アセットの再保存で消すことができるかもお試しいただけますと助かります。

以上、よろしくお願いいたします。​

[Attachment Removed]

お世話になっております。

再現環境は下記となりますので、ご確認のほどよろしくお願いいたします。

UE5.7.4で新規作成したプロジェクトで、設定は下記となります。

~~~

三人称

C++

Desktop

Maximum

~~~

下記アセットで参照切れが発生しており、

/Game/Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling

参照切れアセットは下記となっております。

/Game/Variant_SideScroller/Input/UI_TouchInterface_SideScrolling

「Variant_SideScroller」→「Variant_SideScrolling」へフォルダリネームした際に発生したリダイレクタのものかと思われます。

[Attachment Removed]

また、該当アセットを開き、そのままコンパイル&保存すると添付画像の状態の参照となり、テクスチャが増える結果となっていました

[Attachment Removed]

お世話になっております。

再現条件のご提供ありがとうございました! 確かに当方でも再現いたしました。

ご提案いただいた対処法についてですが、恐れながら、メタデータの削除では本件の参照切れは解消できないと思われます。代わりに、CoreRedirects を使用して誤った参照先を正規の参照先に直し、アセットを再保存する方法をご案内いたします。

まず、プロジェクトの Config/DefaultEngine.ini に以下を追記します(([CoreRedirects] セクションが既にある場合は行の追加のみで構いません)。

[CoreRedirects]
+PackageRedirects=(OldName="/Game/Variant_SideScroller/...",NewName="/Game/Variant_SideScrolling/",MatchWildcard=true)

追記後、エディタを再起動します。

次に、下記の5アセットをコンテンツブラウザ上で右クリックし「Save」を押します。

・Variant_SideScrolling/Anims/ABP_Manny_SideScroller

・Variant_SideScrolling/Input/Actions/IA_Interact

・Variant_SideScrolling/Input/Actions/IA_Mover

・Variant_SideScrolling/Input/BPI_TouchInterface_SideScrolling

・Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling

保存が終わりましたら、参照ビューアを開き、「None」が消えていることをご確認ください。

修正確認後、[CoreRedirects] セクションに追加した +PackageRedirects= の行を削除します。

本件はテンプレート側の不備のため、開発チームへ報告し、修正を依頼する予定です。

UE5.7の段階では、大変お手数ですが、上記の手順でご対応をお願いいたします。

以上、よろしくお願いいたします。

[Attachment Removed]

返答ありがとうございます。

こちらでCoreRedirectsを試してみたうえで、こちらで作成したメタデータ表示ツールにかけたところ、画像の「CustomEvent_0」がグラフ上にも見当たらないのですが、こちらの詳細は分かりますでしょうか?

リダイレクタを通す前は「Variant_SideScroller」のパスで残っていたもののようです。

[Attachment Removed]

参考の為、リダイレクタを行っていない元の状態で、再保存のみしたものも添付しておきます。

再保存をしても​「SideScrolling」の「CustomEvent_0」は生成されない事から、壊れたメタデータではないかと想定しております。

[Attachment Removed]

追加の参照切れ情報​となります

同プロジェクトにて"/Game"以下のアセットに対してFAssetRegistryModule::GetDependencies()で参照を取得したうえ、"/Game/"で始まるアセットと思われるパスの有無チェックを行ったところ、添付のような状況で幾つか参照切れが発生しているようでしたのでお伝えしておきます。

~~~

/Game/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_C

/Game/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CU

不明:/Game/Characters/Heroes/Mannequin/Meshes/SKM_Quinn

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_01

/Game/Characters/Mannequins/Anims/Unarmed/Jump/MM_WallJump

不明:/Game/Characters/Mannequins/Animations/EditableAnimations/LS_Attack_01

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_02

不明:/Game/Characters/Mannequins/Animations/EditableAnimations/LS_Attack_02

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_03

不明:/Game/Characters/Mannequins/Animations/EditableAnimations/LS_Attack_03

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_ChargedAttack

不明:/Game/Characters/Mannequins/Animations/EditableAnimations/LS_ChargedAttack

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_01

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_02

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_03

/Game/Characters/Mannequins/Anims/Unarmed/Attack/MM_ChargedAttack

/Game/Characters/Mannequins/Anims/Unarmed/Jump/MM_WallJump

不明:/Game/Characters/Mannequins/Meshes/SKM_Manny

/Game/LevelPrototyping/Interactable/Target/BP_WobbleTarget

不明:/Game/DemoTemplate/_Core/MI_Intro_Colorway

/Game/__ExternalActors__/Variant_Combat/Lvl_Combat/D/ZN/AASHM8JVSL0T04BL1PKPVV

不明:/Game/LevelPrototyping/Interactable/Door/Assets/Meshes/SM_DoorFrame_Edge

/Game/Variant_SideScrolling/Anims/ABP_Manny_SideScroller

不明:/Game/Variant_SideScroller/Anims/ABP_Manny_SideScroller

/Game/Variant_SideScrolling/Input/BPI_TouchInterface_SideScrolling

不明:/Game/Variant_SideScroller/Input/BPI_TouchInterface_SideScrolling

/Game/Variant_SideScroller/Input/UI_TouchInterface_SideScrolling

不明:/Game/Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling

~~~​

[Attachment Removed]

お世話になっております。

■「CustomEvent_0」について

当方でも「CustomEvent_0」のメタデータが残置されているのを確認しました。ご指摘の通り、こちらは「壊れた(不要になった)メタデータ」に該当します(テンプレート制作中に削除された Custom Event の痕跡が何らかの理由で残ったものと思われます)。

エディタ専用データであり、Cook 時に除去されるため、パッケージ製品への影響はありません。

削除されたい場合は、エンジン標準のクリーンアップ関数 FMetaData::RemoveMetaDataOutsidePackage をご利用いただくのが安全です。

​UPackage* Package = LoadPackage(nullptr, TEXT("/Game/Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling"), LOAD_None);
Package->GetMetaData().RemoveMetaDataOutsidePackage(Package);
Package->MarkPackageDirty();
// この後、エディタ上でアセットを保存してください

​**■ 追加でご報告いただいた参照切れについて**

​すべて当方でも確認しました。こちらも実行時・Cookへの影響はないため、対応は必須ではありませんが、削除されたい場合の手順を以下にまとめました。

1. SKM_Manny / SKM_Quinn への参照(MM_Attack_01〜03, MM_ChargedAttack, MF_Pistol_Idle_ADS_AO_CD/CU)

アニメアセットのプレビュー用メッシュ(PreviewSkeletalMesh)がプロジェクトに同梱されていないメッシュを指しています。

ペルソナエディタ上では実在するメッシュにフォールバックするため気づきにくいのですが、横に更新のための「Apply To Asset」ボタンが出ています。このボタンをクリックした後、アセットを再保存してください。

​​

2. EditableAnimations/LS_Attack_* への参照(MM_Attack_01〜03, MM_ChargedAttack, MM_WallJump)

アニメーションを Sequencer でベイクした際に自動付与される、編集元シーケンスへの逆リンクが残ったものです。編集元シーケンスがプロジェクトに同梱されていないため、「死にリンク」となってしまっておりました。各アセットの Details → Asset User Data 配列 → 「Anim Sequence Level Sequence Link」のエントリを削除 → 保存で除去できます。

3. Heroes/Mannequin/Meshes/SKM_Quinn への参照(MF_Pistol_Idle_ADS_AO_CD/CU)

上記1に加え、リターゲット基準ポーズの取得元(RetargetSourceAsset)にも旧パスが残ってしまっておりました。基準ポーズ自体はアセット内に焼き込み済みのため機能への影響はありません。アセットを開き、 Details → Animation → Retarget Source Asset を SKM_Quinn_Simple 等に差し替え → 保存で除去できます。

4. DemoTemplate/_Core/MI_Intro_Colorway への参照(BP_WobbleTarget)

コンポーネントのマテリアルオーバーライドに残ったハード参照のようです。ロード時に無効化されるため、アセットを再保存するだけで消えます。

5. Door/Assets/Meshes/SM_DoorFrame_Edge への参照(Lvl_Combat の DoorFrame アクター)

このメッシュは実際には Door/Meshes/SM_DoorFrame_Edge に存在しており、旧フォルダ階層への参照だけが残った状態です。以前ご案内した CoreRedirects 手法で修正できます。

→ DefaultEngine.ini に以下を追記しエディタを再起動:

+PackageRedirects=(OldName="/Game/LevelPrototyping/Interactable/Door/Assets/Meshes/SM_DoorFrame_Edge",NewName="/Game/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Edge") → Lvl_Combat を開き、該当の DoorFrame アクターを一度少し動かして戻し(変更フラグを立てるため)、レベルを保存。確認後、追記した行は削除して構いません。

以上、よろしくお願いいたします。

[Attachment Removed]

ご返答ありがとうございます。

また、各参照切れに関しても対処方法をお教えいただき、とても助かります。

社内で情報を共有し、プロジェクトでも同様な事が起きた際の対処法とさせていただこうと思います。

[Attachment Removed]

ご確認ありがとうございます。

ケース・バイ・ケースのお話になってしまい申し訳ありませんが、それぞれに適したやり方で除去するのが安全かつ動作保証できる、という視点で返信させていただきました。

また何か不明なケースがございましたら、いつでもお気軽にお問い合わせください。

それでは、本件は対応済みとしてCloseさせていただきます。

以上、よろしくお願いいたします。

[Attachment Removed]