Open2

UE5 別プロジェクトに移行する

PitekiPiteki

ProjectA から必要なモノだけを抜き出して ProjectB を作成する時に手順。

  • 新規で ProjectB を作成
  • Source 配下にある c++ ソースから必要なソースをコピー
  • c++ ソースの PROJECTA_API をPROJECTB_API にリネーム。
  • 必要なら c++ ソースのクラス名を変更。(ProjectACharacter などプロジェクト名が入っているものを変えたいとき)
  • C++ のクラス名等のリダイレクタを DefaultEngine.ini に追記する。
DefaultEngine.ini
[CoreRedirects]
;+PackageRedirects=(OldName="/Script/ProjectA",NewName="/Script/ProjectB")
;+PackageRedirects=(OldName="/Script/ProjectASomeModule",NewName="/Script/ProjectBSomeModule")
;+ClassRedirects=(MatchSubstring=True,OldName="ProjectA",NewName="ProjectB")
;+EnumRedirects=(MatchSubstring=True,OldName="ProjectA",NewName="ProjectB")
;+FunctionRedirects=(MatchSubstring=True,OldName="ProjectA",NewName="ProjectB")
;+StructRedirects=(MatchSubstring=True,OldName="ProjectA",NewName="ProjectB")
;+PropertyRedirects=(MatchSubstring=True,OldName="ProjectA",NewName="ProjectB")
  • c++ のビルドが通る事を確認
  • Config/ 内の各種 ini を見比べる等して ProjectB に必要なプロジェクト設定を行う。
  • ProjectA から必要なレベルやアセットを右クリック -> アセットアクション -> 移行 で ProjectB の Content フォルダに移行する
  • ProjectB を起動。アセットの c++ 親クラスが認識される事を確認。
    ※ この段階でリダイレクタが働いて旧モジュール.旧クラス名 は 新モジュール.新クラス名としてロードされるが、MatchSubstring のリダイレクタは重いのでアセットを保存してリダイレクタを削除する。
  • ProjectB のコンテンツフォルダを右クリック -> すべて再保存 を実行。
  • 移行したレベル内に配置したアクタを全選択 -> 選択中のアクタを保存 を実行。(レベルごとにやる必要がありそう)
  • DefaultEngine.ini に記載したリダイレクタを削除する。(; でコメントアウト可)
PitekiPiteki

リダイレクタの内容はあまり自信がない。
もうちょっと良い記述方法がありそう。

移行期間中はしばらくリダイレクタを有効にしておけばいいかなと思っていたけど、
「すべてを再保存」した後もリダイレクタが有効になっている事と、BP のファイル名に ProjectA が含まれていると正常動作しないファイルがあった。
リダイレクタは再保存のときだけ有効にするか アセットのファイル名もリネームしてしまうのが良いかも。