λͺ¨λμ Unreal Engineμ μννΈμ¨μ΄ μν€ν μ²μμ κΈ°λ³Έμ μΈ κ΅¬μ± μμλ‘, λ λλ§, μ λ ₯ μ²λ¦¬, κ²μνλ μ΄ λ‘μ§ λ± νΉμ κΈ°λ₯μ λ 립μ μΈ μ½λ λ¨μλ‘ μΊ‘μνν μ½λ λ¬Άμμ λλ€. κ° λͺ¨λμ Unreal Build Tool(UBT)μ μν΄ κ°λ³μ μΌλ‘ μ»΄νμΌλλ©°, νμν κ²½μ° λ€λ₯Έ λͺ¨λκ³Όμ μμ‘΄μ±μ μ μνμ¬ μ°κ²°λ μ μμ΅λλ€.
λͺ¨λμ ꡬ쑰
λͺ¨λμ νλ‘μ νΈμ πSource λ΄μ μμΉνλ©°, λ€μκ³Ό κ°μ ꡬ쑰λ₯Ό κ°μ§λλ€.
MyProject/
βββ Source/
βββ MyModule/
βββ MyModule.Build.cs
βββ Private/
β βββ MyModule.cpp
βββ Public/
βββ MyModule.h
- MyModule.Build.cs: λͺ¨λμ λΉλ μ€μ κ³Ό μμ‘΄μ±μ μ μν©λλ€.
- Private/: λͺ¨λμ λ΄λΆ ꡬν νμΌ(.cpp λ±)μ ν¬ν¨ν©λλ€.
- Public/: λ€λ₯Έ λͺ¨λμμ μ κ·Ό κ°λ₯ν ν€λ νμΌ(.h λ±)μ ν¬ν¨ν©λλ€.
Build.cs νμΌ
π{ModuleName}.Build.cs νμΌμ λͺ¨λμ λΉλ μ€μ κ³Ό μμ‘΄μ±μ μ μν©λλ€.
μ΄ νμΌμ μ°Έκ³ νμ¬ Unreal Build Tool(UBT)μ΄ λͺ¨λμ λΉλν©λλ€.
using UnrealBuildTool;
public class MyModule : ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] {
"Core", "CoreUObject", "Engine"
});
PrivateDependencyModuleNames.AddRange(new string[] {
"Slate", "SlateCore"
});
}
}
- PublicDependencyModuleNames: λͺ¨λ μΈλΆμμ μ κ·Ό κ°λ₯ν μμ‘΄ λͺ¨λμ μ μν©λλ€. μλ₯Ό λ€μ΄, Aλͺ¨λμ΄ Bλͺ¨λμ PublicμΌλ‘ μμ‘΄νκ³ μλ€λ©΄, Aλͺ¨λμ μ¬μ©νλ μΈλΆμμλ Bλͺ¨λμ μ κ·Ό κ°λ₯ν©λλ€.
- PrivateDependencyModuleNames: λͺ¨λ λ΄λΆμμλ§ μ¬μ©νλ μμ‘΄ λͺ¨λμ μ μν©λλ€. μλ₯Ό λ€μ΄, Aλͺ¨λμ΄ Bλͺ¨λμ Privateλ‘ μμ‘΄νκ³ μλ€λ©΄, Aλͺ¨λμ μ¬μ©νλ μΈλΆμμ Bλͺ¨λμ μ κ·Ό ν μ μμ΅λλ€.
λͺ¨λ ꡬν
- IModuleInterfaceμ μμνμ¬ {ModuleName} ν΄λμ€λ₯Ό λ§λ λ€.
μ΄λ ν΄λμ€μ ν€λ νμΌ(.h)μ π{ModuleName}/Pubilcμ μμ€ νμΌ(.cpp)μ π{ModuleName}/Privateμ μΆκ°νλ€. - {ModuleName}.cpp νμΌμ IMPLEMENT_MODULE λ§€ν¬λ‘λ₯Ό μ¬μ©νμ¬ λͺ¨λλ‘ λ±λ‘ν©λλ€.
#include "TestModule.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_MODULE(FDefaultModuleImpl, TestModule);
νλΌμ΄λ¨Έλ¦¬ λͺ¨λ (Primary Module)
λͺ¨λ νλ‘μ νΈμ νλ¬κ·ΈμΈμ νλμ νλΌμ΄λ¨Έλ¦¬ λͺ¨λμ΄ μμ΄μΌ ν©λλ€.
UBTμ νλ‘μ νΈμ νλΌμ΄λ¨Έλ¦¬ λͺ¨λμ Rootλ‘ μμ‘΄μ± κ·Έλν(Dependency Graph)ꡬμ±νκ³ μ΄λ₯Ό λ°νμΌλ‘ λΉλλ₯Ό μ§ννκΈ° λλ¬Έμ
λλ€.
κΈ°λ³Έμ μΌλ‘ νλ‘μ νΈμ μ체 νλΌμ΄λ¨Έλ¦¬ λͺ¨λμ΄ μμ§λ§, λͺ¨λμ λ°λ‘ μ μνμ¬ μ½λλ₯Ό μ 리ν μ μμ΅λλ€.
μ΄λλ IMPLEMENT_PRIMARY_GAME_MODULE λ§€ν¬λ‘λ₯Ό μ΄μ©νμ¬ νλΌμ΄λ¨Έλ¦¬ λͺ¨λμ μ§μ ν μ μμ΅λλ€.
#include "FPSTemplate.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, FPSTemplate, "FPSTemplate" );
λͺ¨λ λ‘λ λ°©μ μ μ΄
Unreal Engineμμλ λͺ¨λμ λ‘λ λ°©μμ π.uproject λλ π.uplugin νμΌμμ μ μν μ μμ΅λλ€.
"Modules": [
{
"Name": "MyModule",
"Type": "Runtime",
"LoadingPhase": "Default"
},
{
"Name": "MyModuleEditor",
"Type": "Editor",
"LoadingPhase": "Default"
}
]
λͺ¨λ μ νμ λͺ¨λμ΄ μ¬μ©λλ μ©λλ₯Ό μ§μ νλ©°, UBTλ μ€ν νκ²½μ λ°λΌ μ μ ν μ νμ λͺ¨λμ λ‘λν©λλ€.
λͺ¨λ μ νμ EHostType::Type μ΄κ±°νμ ν΅ν΄ μ μλλ©°, μ£Όμ μ νμ λ€μκ³Ό κ°μ΅λλ€:
- Runtime: κ²μ μ€ν μ λ‘λλλ λͺ¨λμ λλ€.
- Editor: μλν°μμλ§ λ‘λλλ λͺ¨λμ λλ€.
- Developer: κ°λ° μ€μλ§ λ‘λλλ λͺ¨λμ λλ€.
- Program: λ 립 μ€νν νλ‘κ·Έλ¨μ μ¬μ©λλ λͺ¨λμ λλ€.
λͺ¨λμ λ‘λ© μμ μ LoadingPhase μμ±μ ν΅ν΄ μ μ΄ν μ μμΌλ©°, μ£Όμ κ°μ λ€μκ³Ό κ°μ΅λλ€:
- Default: κΈ°λ³Έ λ‘λ© μμ μ λλ€.
- PreDefault: κΈ°λ³Έ λ‘λ© μμ λ³΄λ€ μμ λ‘λλ©λλ€.
- PostDefault: κΈ°λ³Έ λ‘λ© μμ μ΄νμ λ‘λλ©λλ€.
λͺ¨λ μ¬μ©μ μ₯μ
1. λͺ νν μ½λ λΆλ¦¬ | λͺ¨λμ κΈ°λ₯ λ¨μλ‘ μ½λλ₯Ό ꡬλΆνκ³ , λ΄λΆ ꡬνμ κ°μΆ€μΌλ‘μ¨ μΊ‘μνλ₯Ό μ€νν©λλ€. (OOP μμΉ μ€μ) |
2. λΉλ μκ° λ¨μΆ | λͺ¨λμ λ³λ μ»΄νμΌ μ λμΌλ‘ μ²λ¦¬λλ©°, λ³κ²½λ λͺ¨λλ§ λ€μ μ»΄νμΌλ©λλ€. |
3. IWYU κΈ°λ° μμ‘΄μ± κ΄λ¦¬ | IWYU μμΉμ λ°λΌ λͺ¨λλ€μ μμ‘΄μ± κ·Έλνλ‘ μ°κ²°λμ΄ μκ³ , μ€μ λ‘ μ¬μ©λλ ν€λλ§ ν¬ν¨(Include)λλλ‘ μ νλμ΄ μμ΅λλ€. μ΄μ λ°λΌ, μ€μ νλ‘μ νΈμ μ¬μ©λμ§ μλ λͺ¨λμ μ»΄νμΌμμ μμ νκ² μ μΈλ μ μμ΅λλ€. |
4. λ°νμ λ‘λ© μ μ΄ κ°λ₯ | λͺ¨λμ λ°νμμ νμμ λ°λΌ λμ μΌλ‘ λ‘λ©/μΈλ‘λ© κ°λ₯νμ¬, μ±λ₯ μ΅μ νμ μ 리ν©λλ€. |
5. νλ«νΌ μ‘°κ±΄λΆ ν¬ν¨ κ°λ₯ | Target.Platform == ... λ±μ 쑰건μΌλ‘ νΉμ νλ«νΌμμλ§ λͺ¨λμ ν¬ν¨ν μ μμ΅λλ€. |
6. μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ± ν₯μ | κΈ°λ₯λ³λ‘ λλ λͺ¨λ ꡬ쑰λ ν₯ν 리ν©ν λ§κ³Ό ν μ€νΈ, μ¬μ¬μ©μ ν¨κ³Όμ μ λλ€. |
'π₯οΈ Study Note > Unreal Engine' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Unreal] Game Ability System(GAS) - Ability System Componet(ASC) (2) | 2025.06.10 |
---|---|
[Unreal] Game Ability System(GAS) (0) | 2025.06.10 |
[Unrael Engine] IWYU κ°λ¨ μ 리 (0) | 2025.05.21 |
[Unreal Engine] Animation Blueprintμμ Owner μΊλ¦ν°μ μ 보λ₯Ό κ°μ Έμ€λ 3κ°μ§ λ°©λ² (1) | 2025.05.19 |