Unreal Engine (UE) でアセットを移動したり名前の変更をすると、元の位置に リダイレクタ が残されます。これは現時点で読み込まれていないものの、このアセットを参照するパッケージが変更先を検出するためのものです。
プロジェクトの初期段階で一貫した命名方法を選択することで、リダイレクトで発生する問題の多くを回避することができます。アセットの命名方法のガイドラインは「アセットの命名規則に関する推奨事項」を参照してください。
コンテンツ ブラウザでリダイレクタを表示する
コンテンツ ブラウザでリダイレクタを表示するためのフィルターは 2 つあります。
-
[Filter] > [Other Filters] > [Show Redirectors] を選択すると、コンテンツ ブラウザでリダイレクタを表示させることができますが、その他のアセット タイプの絞り込みはされません。
-
[Filter] > [Miscellaneous] > [Redirectors] を選択すると、他のフィルタと同様にコンテンツ ブラウザにリダイレクタのみを表示します。
Unreal Editor でリダイレクタをクリーンアップする
リダイレクトを削除して、アセット参照がアセットの新しい場所をターゲットにするようにするには、リダイレクトを右クリックして、[Fixup] を選択します。この操作により、リダイレクタを参照しているすべてのパッケージを再保存し、リダイレクタを参照しているすべてのものを再保存できた場合は、リダイレクタはクリーンアップされます。
ResavePackages コマンドレットを使用してリダイレクタを除去する
また、ResavePackages
コマンドレットで -FixupRedirectors
オプションを指定して実行すると、プロジェクト内のすべてのリダイレクトをクリーンアップすることができます。以下はコマンドラインの例です。
UnrealEditor.exe <GameName or uproject> -run=ResavePackages -fixupredirects -autocheckout -projectonly -unattended
このバージョンのコマンドラインでは、バージョン管理システムから修正する必要のあるすべてのファイルをチェックアウトし、ユーザーのローカルマシン上でそのリダイレクタをクリーンアップします。その後、ユーザーがそれらをサブミットする必要があります。-autocheckin
は自動処理で使用することができ、ファイルをチェックインしてくれることもあります。
Caveats
名前の変更
オブジェクトを作成して名前を変更した後に、元のオブジェクト名と同じ名前で新規にオブジェクトを作成するとエラーが発生します。理由は最初のオブジェクトの名前変更時にリダイレクタが作成されたからです。リダイレクタとリソースは同じ名前を持つことができません。
ダングリング リダイレクタ
リダイレクタには以下のように再現可能な既知の問題がいくつかあります。
シナリオ 1
- オブジェクト A を B に名前変更します。
- オブジェクト B を削除します。
- オブジェクト B が使用中のため削除できませんというエラーメッセージが表示されます。この問題は名前変更時に作成されたリダイレクタがまだ B をポイントするため発生します。
シナリオ 2
- オブジェクト A を B に名前変更します。
- オブジェクト B の名前を A に戻します。
- オブジェクト A を削除します。
- 最初の名前変更時に作成されたリダイレクタは破壊されますが、新たなリダイレクタが B に作成されます。結果としてオブジェクト A は参照されているため削除することができません。
エディタからリダイレクタを修正するか、削除する前にSavePackages するとこの問題が解決します。