LoginSignup
3
0

More than 5 years have passed since last update.

UE4 プロジェクト移行 4.15 から 4.18 に移行する際に苦戦したこと

Last updated at Posted at 2017-12-01

Unreal Engine 4.18 が出てしばらく経ったが、今回 4.15 で作成したプロジェクト(C++コード含む)を 4.18 に移行する際にハマった点、解決のためにやったことを書いておく。

環境

  • Win10 Pro
  • UE 4.18
  • VisualStudio Community
  • UE 4.15 で作成したプロジェクト(C++コード含む)

UE4 の自動移行にお任せ

  1. 4.18 を起動して、 4.15 で作成したプロジェクトを開く
  2. 移行するか確認されるのでGO!
  3. ビルドエラーで開けない

sln を作りなおす

  1. .sln 削除
  2. .uproject 右クリックで "Generate Visual Studio 〜"

SCM 使ってる関係なのか、.sln はうまく開けないことがあり、その時にやる手順。

Rules 関連ファイルの修正

Target.cs

まず Source/ProjectName.Target.cs のビルドエラーになるので修正する。

public class ProjectNameTarget : TargetRules
 {
    public ProjectNameTarget(TargetInfo Target)

    // ↓このように後ろに追加

    public ProjectNameTarget(TargetInfo Target) : base(Target)

TargetRules を継承するクラスのコンストラクタが変わったようだ。

Source/ProjectNameEditor.Target.cs も同様の変更が必要。

Build.cs

Source/ProjectName/ProjectName.Build.cs を修正する。

 public class ProjectName : ModuleRules
 {
    public ProjectName(TargetInfo Target)

    // ↓このように修正

    public ProjectName(ReadOnlyTargetRules Target) : base(Target)

ModuleRules を継承するクラスのコンストラクタも変わっており、パラメータも新たなものになっている。

また、今回移行したプロジェクトで使用しているライブラリで、今までは

UEBuildConfiguration.bForceEnableExceptions = true;

の記述が必要だったが、この行があるとビルドエラーになるので削除した。

ProjectName.h

Source/ProjectName/ProjectName.h の修正。
これも若干変更することになる。

#pragma once

#include "Engine.h"

// ↓ Engine.h の include は非推奨となり CoreMinimal.h に変更

#include "CoreMinimal.h"

用途別にどのヘッダを include するか選択できるようになったようだ。
必要に応じて、最低限のヘッダを選択することにより、余計なヘッダを見に行かなくなる。

ProjectName.cpp

Source/ProjectName/ProjectName.cpp の修正。

#include "Modules/ModuleManager.h"

が必要になっていた。

自前で作成したクラス全般

今までは

#include "ProjectName.h"

が必要だったが不要になった模様。

IPlatformFile を使用している場合

ローカルのファイル検索で IPlatformFile::FDirectoryVisitor を実装しているコードがあったが、
GenericPlatformFile.h の include が必要になった。
また、処理中で FPaths を使用していたが、こちらは Paths.h の include が必要になった。

UTexture2D を使用している場合

Engine/Texture2D.h の include が必要になった。
これは ProjectName.hEngine.h を include しないよう変更したのが影響している。

IImageWrapper.h を include している場合

ヘッダそのものが無くなっていた...

#include "ImageWrapper.h"

// ImageWrapper.h は無くなり、以下の3つの追加が必要になっていた

#include "ModuleManager.h"
#include "IImageWrapper.h"
#include "IImageWrapperModule.h"

コードについても IImageWrapperPtr から TSharedPtr にするよう警告が出るので、

IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);

// ↓このように変更

TSharedPtr<IImageWrapper> ImageWrapper =
    ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);

と変更した。

Fpaths の変更

IPlatformFIle の所でヘッダについては触れたが、

FPaths::GameDir()FPaths::ProjectDir() への置き換えが推奨されていた。

まとめ

概ね Visual Studio でのビルドエラーのメッセージを見ると、どのように変更すべきかが書かれているので、
メッセージに従い順番に解決していけば問題はない。

ヘッダごと移動してしまったものについては、公式リファレンス(日本語は古いことが多いので英語ページ)を参照するのが良い。

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0