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
まとめ
以上で無事に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
これらを駆使してエラーをひとつひとつ解決していきましょう。