[Unreal Engine] λͺ¨λ“ˆ(Module)

2025. 5. 21. 19:27Β·πŸ–₯️ Study Note/Unreal Engine

λͺ¨λ“ˆμ€ 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λͺ¨λ“ˆμ— μ ‘κ·Ό ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λͺ¨λ“ˆ κ΅¬ν˜„ 

  1. IModuleInterface을 μƒμ†ν•˜μ—¬ {ModuleName} 클래슀λ₯Ό λ§Œλ“ λ‹€.
    μ΄λ•Œ 클래슀의 헀더 파일(.h)은 πŸ“‚{ModuleName}/Pubilc에  μ†ŒμŠ€ 파일(.cpp)은 πŸ“‚{ModuleName}/Private에 μΆ”κ°€ν•œλ‹€. 

  2. {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
'πŸ–₯️ Study Note/Unreal Engine' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Unreal] Game Ability System(GAS) - Ability System Componet(ASC)
  • [Unreal] Game Ability System(GAS)
  • [Unrael Engine] IWYU 간단 정리
  • [Unreal Engine] Animation Blueprintμ—μ„œ Owner μΊλ¦­ν„°μ˜ 정보λ₯Ό κ°€μ Έμ˜€λŠ” 3κ°€μ§€ 방법
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (146)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • μ˜€λ‹΅λ…ΈνŠΈ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • 링크

    • 곡지사항

    • 인기 κΈ€

    • νƒœκ·Έ

      ν—¬ν…Œμ΄μ»€
      unrealengine module
      propertyaccess
      ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
      μ•Œκ³ λ¦¬μ¦˜
      cpp
      μ½”λ”©ν…ŒμŠ€νŠΈ
      κ²Œμž„ν”„λ‘œκ·Έλž˜λ°
      κ²Œμž„ 개발
      UnrealEngine
      unrealengine build system
      UnrealEngine5
      μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜
      κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°
      ν”„λ£Œκ·Έλž˜λ¨ΈμŠ€
      OnlineSubsystem
      κ·Έλž˜ν”„ 순회
      programmers
      κ²Œμž„ λͺ¨μž‘
      그리디(greedy)
    • 졜근 λŒ“κΈ€

    • 졜근 κΈ€

    • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
    Beankong_
    [Unreal Engine] λͺ¨λ“ˆ(Module)
    μƒλ‹¨μœΌλ‘œ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”