背景
UE4でC++クラスを親に持つBPを他のプロジェクトに移行すると、
親クラスを見失ってBPをコンパイルできなくなる(そもそも開けなくなる)ため、
親のC++クラスも一緒に移行しましょう。というお話。
参照URL
フォーラムにドンピシャの答えがありました。助かった…
https://forums.unrealengine.com/development-discussion/blueprint-visual-scripting/24493-migrate-code-based-blueprint
手順
-1. C++ファイルをコピペ
元プロジェクトの必要なC++ファイル(.h, .cpp)をエクスプローラ上で移行先プロジェクトにコピーします。
-2. VSプロジェクトを更新
NewProject.uprojectを右クリック → Generate Visual Studio project files
でVisual Studioに新しいファイルたちを認識させます。
-3. ヘッダーファイルを修正
ヘッダーファイル内のOLDPROJECT_APIをすべてNEWPROJECT_APIに置換します。
-4. コンパイル
ここまでの作業でVisualStudio上でビルドが通るか確認して一安心しましょう。
-5. Config/DefaultEngine.iniの編集
DefaultEngine.iniにリダイレクタを追記します。
[CoreRedirects]
+ClassRedirects=(MatchSubstring=True,OldName="/Script/OldProject",NewName="/Script/NewProject")
+EnumRedirects=(MatchSubstring=True,OldName="/Script/OldProject",NewName="/Script/NewProject")
+FunctionRedirects=(MatchSubstring=True,OldName="/Script/OldProject",NewName="/Script/NewProject")
+StructRedirects=(MatchSubstring=True,OldName="/Script/OldProject",NewName="/Script/NewProject")
+PackageRedirects=(OldName="/Script/OldProject",NewName="/Script/NewProject")
これでスクリプト内のプロジェクト名をNewProjectに読み替えてくれるようになります。
MatchSubstring=Trueがミソで、個別のファイルを指定しなくても機能します。
-6. 晴れてBPの移行
OldProjectをUEエディタで開いて
BPを右クリック→アセットアクション→移行 でNewProjectのContentフォルダにBPをコピー
-7. NewProjectを開いて参照関係が崩れていないか確認
やったー( ;∀;) 3日くらい悩んだ…