UE4 でアセットを移動したり名前の変更をすると、元の位置に 'Redirector' が残されます。これは現時点で読み込まれていないものの、このアセットを参照するパッケージが変更先を検出するためのものです。早期に命名システムを選んで、順守することにより、リダイレクトに伴う問題を回避することができます。
エディタからリダイレクタを修正する
エディタでリダイレクタを確認することで、コンテンツ ブラウザで Show Redirectors フィルタが有効になります。次にリダイレクタを右クリックして [Fixup] を選択します。これにより、リダイレクタをポイントするすべてのパッケージが再保存されます。参照するすべてのものを再保存できたら、リダイレクタは削除されます。
ResavePackages コマンドレット
ResavePackages コマンドレットは、-FixupRedirectors オプションと共に実行し、プロジェクト内のすべてのリダイレクタを修正します。以下はコマンドラインの例です。
UE4Editor.exe <GameName or uproject> -run=ResavePackages -fixupredirects -autocheckout -projectonly -unattended
コマンドラインのこのバージョンは、ユーザーのローカルマシンで実行します。修正が必要なすべてのファイルをチェックアウトします。ユーザーはこれらをサブミットする必要があります。自動化プロセスによって -autocheckin を使用することができます。これを使うと、ファイルをチェックインしてくれます。
陥りやすいミス
名前変更
オブジェクトを作成して名前を変更した後に、元のオブジェクト名と同じ名前で新規にオブジェクトを作成するとエラーが発生します。理由は最初のオブジェクトの名前変更時にリダイレクタが作成されたからです。リダイレクタとリソースは同じ名前を持つことができません。
ダングリング リダイレクタ
リダイレクタには以下のように再現可能な既知の問題がいくつかあります。
シナリオ 1
- オブジェクト A を B に名前変更します。
- オブジェクト B を削除します。
- オブジェクト B が使用中のため削除できませんというエラーメッセージが表示されます。この問題は名前変更時に作成されたリダイレクタがまだ B をポイントするため発生します。
シナリオ 2
- オブジェクト A を B に名前変更します。
- オブジェクト B の名前を A に戻します。
- オブジェクト A を削除します。
- 最初の名前変更時に作成されたリダイレクタは破壊されますが、新たなリダイレクタが B に作成されます。結果としてオブジェクト A は参照されているため削除することができません。
エディタからリダイレクタを修正するか、削除する前にSavePackages するとこの問題が解決します。