PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 Includeファイルが認識されない場合の対処法

環境

UE4.23.0
Visual Studio 2017 Community

Includeファイルがエラーになるケース/対処法

例えばキャラクターの生成時にNiagaraEffectをSpawnしたいケース
下記のようなコードを書いてみます。

// SandboxCharacter.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Niagara/Classes/NiagaraSystem.h"
#include "SandboxCharacter.generated.h"

UCLASS()
class UE4SANDBOX_API ASandboxCharacter : public ACharacter
{
	GENERATED_BODY()
public:
    ASandboxCharacter();
protected:
    virtual void BeginPlay() override;
public:	
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|FX")
    UNiagaraSystem* CharacterSpawnFX;
// SandboxCharacter.cpp
#include "SandboxCharacter.h"
#include "Niagara/Public/NiagaraFunctionLibrary.h"

void ASandboxCharacter::BeginPlay()
{
    Super::BeginPlay();

    if (CharacterSpawnFX->IsValid())
    {
        UNiagaraFunctionLibrary::SpawnSystemAtLocation(this, CharacterSpawnFX, GetActorLocation(), GetActorRotation(), true);
    }
}

上記コードを記述した際に
SandboxCharacter.h 内の
#include "Niagara/Classes/NiagaraSystem.h"
SandboxCharacter.cpp内の
#include "Niagara/Public/NiagaraFunctionLibrary.h"
2つがエラーになるのではないでしょうか。

エラーの原因/解決方法

エラーの原因としてはNiagara ModuleがProjectに紐付いていないことにあります。
Moduleについては下記が参考になります。
[UE4] モジュールについて|株式会社ヒストリア


解決方法としてはProjectに使用するModuleを紐付けてやればよいです。
①Moduleの追加

// (ProjectName).Build.cs
// 例では UE4Sandbox
using UnrealBuildTool;

public class UE4Sandbox : ModuleRules
{
    public UE4Sandbox(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", /*追加*/"Niagara" });
    }
}

②ProjectのSolutionの更新
Solutionの更新には下記のようなやり方があります。

  • Project起動後 -> File -> Reflesh (IDE Name) Project

f:id:PaperSloth:20190923083226p:plain

  • Explorer -> (ProjectName).uproject上で右クリック -> Generate (IDE Name) project files

f:id:PaperSloth:20190923083456p:plain

まとめ

以上で無事にInclude時のエラーが解決できたのではないでしょうか。

Moduleの追加忘れは初期の頃にハマりやすい罠なので注意が必要です。
SequencerやNiagaraやChaosなどの関数を呼び出す際はModuleの追加忘れに気を付けましょう。
また、Plugin作成時にはPlugin側のBuild.csへのModule追加が必要になります。
ProjectとPluginは別々のBuild.csが作成されるため、追加忘れが発生することがあります。


しかし、いざModuleを追加しようとした際にModule名がわからず追加ができないという時もあるでしょう。
そういった時にはAPI Referenceから検索するとよいです。
関数名を検索するとAPI ReferenceにModule名とIncludeパス/ファイル名の記載があります。
今回のNiagaraの場合

- References
  Module名 : Niagara
  Include path : /Engine/Plugins/FX/Niagara/Source/Niagara/Public/NiagaraFunctionLibrary.h
  Include file : NiagaraFunctionLibrary.h

また、クラスの継承関係の記載もあるため大変有用です。
積極的にAPI Referenceを使用していきましょう。
UNiagaraFunctionLibrary | Unreal Engine Documentation

これらを駆使してエラーをひとつひとつ解決していきましょう。
f:id:PaperSloth:20190923084123p:plain