βοΈ μμ§/π« μΈλ¦¬μΌ
[Unreal] μΈλ¦¬μΌ λΉλ μμ€ν
peewoong
2024. 5. 8. 19:06
1. μΈλ¦¬μΌ μλν° κ΅¬μ±
- κ²μ μ μμ μν΄ μν½ κ²μμ¦κ° μ 곡νλ μ μ λꡬ
- μΈλ¦¬μΌ μμ§μ ꡬμ±
- μλν° : κ²μ μ μμ μν΄ μ 곡λλ μμ© νλ‘κ·Έλ¨ (μΌλ°μ μΌλ‘ μΈμνλ μΈλ¦¬μΌ μμ§)
- κ²μ λΉλ : exe νμΌκ³Ό 리μμ€λ‘ μ΄λ£¨μ΄μ§ λ 립μ μΌλ‘ λμνλ κ²μ ν΄λΌμ΄μΈνΈ
- μΈλ¦¬μΌ μλν°μ νΉμ§
- κ²μ κ°λ° μμ μ μν΄ λ€μν ν΄λμ νμΌ μ΄λ¦ κ·μΉμ΄ 미리 μ€μ λμ΄ μλ€.
- μ ν΄μ§ κ·μΉμ μ νμ νκ³ νλ‘μ νΈ ν΄λμ νμΌμ μ€μ ν΄μΌ ν¨
- μλν°μμ κΈ°νκ³Ό κ°λ°μ μλ£ν ν, κ²μ λΉλλ₯Ό ν΅ν΄ μ΅μ’ κ²μ λΉλλ₯Ό μ μνλλ‘ μ€μ
- μΈλ¦¬μΌ μλν°μμ κ²μμ κ΅¬μ± π κ²μ λΉλλ₯Ό μννκ³ νλ‘κ·Έλ¨μ ν¨ν€μ§
2. μΈλ¦¬μΌ μλν°μ λμ
- νλ‘μ νΈ ν΄λμ uproject νμ₯μλ₯Ό λλΈν΄λ¦νλ©΄ μλν°κ° νΈλ¦¬κ±° λ¨
- μλν°μ μ€ν λ°©μ
- uproject νμ₯μλ μλμ° λ μ§μ€νΈλ¦¬μ λ±λ‘λμ΄ μμ
- λ±λ‘μ΄ μλμ΄ μλ€λ©΄ λ°μ²λ₯Ό μ€νν΄ λ±λ‘
- UnrealVersionSelector νλ‘κ·Έλ¨μΌλ‘ νλ‘μ νΈ μ λ³΄κ° λ겨μ§
- UnrealVersionSelectorλ λ°μ²κ° μ μ₯ν μλν° μ 보λ‘λΆν° λ²μ μ λ§λ μλν°λ₯Ό μ€νν¨
- uproject νμ₯μλ μλμ° λ μ§μ€νΈλ¦¬μ λ±λ‘λμ΄ μμ
- UnrealVersionSelector μμ€λ μν½κ²μμ¦ Githubμμ νμΈ κ°λ₯
- .uproject πUnrealVersionSelector π UnrealEditor
3. μλν° λ²μ μ 보μ νμ
- νλ‘μ νΈ .uproject ν μ€νΈ νμΌμ μ ν΄μ Έμμ
- μν½κ²μμ¦ λ°μ²λ νλ‘κ·Έλ¨ λ°μ΄ν° ν΄λμ LauncherInstalled.dat νμΌμ λͺ λ²μ μ΄ μ΄λμ μ€μΉλμ΄ μλμ§ μ μ΄λ³΄κ° μ μ₯
- νλ‘μ νΈ ν΄λ μμ± λ° txt νμΌ μμ±
- λ΄μ©μ JSON νμμΌλ‘ μλμ κ°μ΄ μμ±
- νμ₯μλ₯Ό uprojectλ‘ λ³κ²½
{
"FileViersion" : 3,
"EngineAssociation" : "5.1"
}
- .uproject νμ₯μλ μλν°λ₯Ό λμ°κΈ° μν λͺ μΈμ μν μ ν¨
- νμΌμ κΈ°λ‘λ λ²μ μ 보λ₯Ό λ°νμΌλ‘ μν½ λ°μ²κ° μ§μ ν μ 보λ₯Ό μ°Ύμ μλν°λ₯Ό μ€νν¨
- ProgramData/Epic/UnrealLauncher ν΄λμ κ΄λ ¨ μ λ³΄κ° μμ
- μ΄ μμ JSON νμμΌλ‘ μ€μΉλ μΈλ¦¬μΌ λ²μ μ λ³΄κ° κΈ°λ‘λμ΄ μμ
- μ€ννλ©΄ μλμΌλ‘ ν΄λ μμ±
- config : νλ‘μ νΈ μ€μ μ νμν μ 보 보κ΄
- content : μμ μ 보κ΄
- derivedDataCache : μ°λ¦¬κ° μ¬μ©νλ μμ
λ€μ μ£Όμ μ 보λ€μ 미리 μΊμ±
- λ‘λ©μ 빨리νλλ° λμ
- μ©λμ΄ κΈν΄ μ§μλ λμμλ λ¬Έμ μμ
- intermediate : μμμ μΌλ‘ μ¬μ©λλ μ€κ° κ²°κ³Όλ¬Όλ€μ 보κ΄
- μ©λμ΄ ν¬λ©΄ μΈμ λ μ§ μμ ν΄λ 무κ΄
- saved : μμλ‘ λ¬΄μΈκ°λ₯Ό μ μ₯
- μλμ μΌλ‘ μ΄λ€ λ°μ΄ν°λ₯Ό μ μ₯νμ§ μμμΌλ©΄ μ§μλ λ¬Έμ μμ
4. λΈλ£¨νλ¦°νΈ νλ‘μ νΈ
- C++ μ½λκ° μλ μΈλ¦¬μΌ νλ‘μ νΈ
- μΈλ¦¬μΌ μμ§μ΄ μ 곡νλ κΈ°λ³Έ κΈ°λ₯μ νμ©ν΄ κ²μμ μ μνλ νλ‘μ νΈ
- κ²μ μ μμ νμν κΈ°λ₯μ λͺ¨λ λ¨μλ‘ μ 곡
- λͺ¨λμ μμλ°μ λΈλ£¨νλ¦°νΈλ₯Ό νμ©ν΄ λͺ¨λ κΈ°λ₯κ³Ό λ‘μ§μ ꡬν
- μΈλ¦¬μΌ μμ§ C++ λͺ¨λμ κ°λ°μκ° μΆκ°λ‘ μμ λ§μ C++ λͺ¨λμ μΆκ°ν μ μμ
π© μΈλ¦¬μΌ C++ λͺ¨λ
- μΈλ¦¬μΌ μμ§μ μμ€ μ½λλ λͺ¨λ λͺ¨λ λ¨μλ‘ κ΅¬μ±
- λͺ¨λμ μ»΄νμΌν΄ μλν° λ° κ²μμ μ°λ¦¬κ° μ μν λ‘μ§ κ³΅κΈ κ°λ₯
- λͺ¨λ λ¨μλ‘ κ΅¬μ±λ C++ μμ€ μ½λλ₯Ό μ»΄νμΌν κ²°κ³Όλ¬Ό
- μλν° μ©μΌλ‘ DLL λμ λΌμ΄λΈλ¬λ¦¬
- κ²μ μ©μΌλ‘ μ μ λΌμ΄λΈλ¬λ¦¬
- μλν° μ© λͺ¨λμ νμ UnrealEditor-{λͺ¨λμ΄λ¦}.DDL μ΄λ¦ κ·μΉ
π© μΈλ¦¬μΌ C++ λͺ¨λ μΆκ°
- μ§μ μ μν C++ λͺ¨λμ μλν°μ μΆκ° κ°λ₯
- μλν° λͺ¨λμ λΉλ ν΄λμ λ£μ΄μ€μΌ ν¨
- Windowsμ κ²½μ° Binaries/Win64 ν΄λμ ν΄λΉ DLLμ λ£μ΄μΌ ν¨
- λΉλλ λͺ¨λ λͺ©λ‘μ μλ UnrealEditor.modules νμΌλ κ°μ ν΄λμ λ£μ΄μ€μΌ μΈμλ¨
- uproject λͺ μΈμμ λͺ¨λ μ΄λ¦μ μ§μ νκ³ μλν°λ₯Ό μ€ν
{
"FileVersion" : 3,
"EngineAssociation" : "5.1"
"Modules" : [
{
"Name" : "λͺ¨λμ΄λ¦"
"Type" : "Runtime"
}
]
}
π© λͺ¨λ C++ μ½λ κ΄λ¦¬
- μΈλ¦¬μΌ νλ‘μ νΈκ° μμ€ μ½λλ₯Ό κ΄λ¦¬νλ κ·μΉμ λ°λΌ μμ€ μ½λ ꡬ쑰λ₯Ό ꡬμ±ν΄μΌ ν¨
- μμ€ μ½λλ λ©ν° νλ«νΌ λΉλ μμ€ν μ μ§μνκΈ° μν΄ νΉμ νλ‘κ·Έλ¨μ μ’ μλμ΄ μμ§ μμ
- μ€μ λΉλλ₯Ό μ§ννλ 주체 : Unreal Bulid Tool μ΄λΌν C# νλ‘κ·Έλ¨
- Source ν΄λμ μ§μ λ κ·μΉλλ‘ μμ€λ₯Ό λ£μΌλ©΄ νλ«νΌμ λ§μΆ°μ μμμ μ»΄νμΌ μ§ν
π© Source ν΄λ ꡬ쑰
- Source ν΄λ
- νκ² μ€μ νμΌ
- λͺ¨λ ν΄λ (보ν΅μ νλ‘μ νΈ μ΄λ¦μΌλ‘ λͺ¨λ μ΄λ¦ μ§μ )
- λͺ¨λ μ€μ νμΌ
- μμ€ μ½λ νμΌ (.h λ° .cpp νμΌ)
- νκ² μ€μ νμΌ : μ 체 μ루μ
μ΄ λ€λ£° λΉλ λμμ μ§μ
- {νλ‘μ νΈμ΄λ¦}.Target.cs : κ²μ λΉλ μ€μ
- {νλ‘μ νΈμ΄λ¦}Editor.Target.cs : μλν° λΉλ μ€μ
- μλ²μ κ°μ λ€λ₯Έ μ€μ νμΌλ μμ
- λͺ¨λ μ€μ νμΌ : λͺ¨λμ λΉλνκΈ° μν C++ νλ‘μ νΈ μ€μ μ 보
- {λͺ¨λμ΄λ¦}.Bulid.cs : λͺ¨λμ λΉλνκΈ° μν νκ²½ μ€μ
- C#μ μ€ν μ€μ μ½λλ₯Ό λ°λ‘ μ»΄νμΌνκ³ κ²°κ³Όλ₯Ό λ°μν μ μλ κΈ°λ₯μ΄ μμ(complie on-the-fly)
- μ΄ κΈ°λ₯μ μ΄μ©νκΈ° μν΄ C# νμΌλ‘ μ€μ μ μ§μ
π© κ²μ νλ‘μ νΈμ μμ€
- λͺ¨λμ ꡬνν ν€λμ μμ€ νμΌμ΄ μμ΄μΌ ν¨
- μ£Όλ‘ {λͺ¨λμ΄λ¦}.hμ {λͺ¨λμ΄λ¦}.cppλ‘ μ§μ
- λͺ¨λμ λΌλλ₯Ό μ μν΄μ£Όλ λ§€ν¬λ‘ μ§μ
- IMPLEMENT_MODULE : μΌλ° λͺ¨λ
- κ²μκ³Όλ μ§μ μ°κ΄μ μμ§λ§ μ μ©ν κΈ°λ₯μ μ 곡
- IMPLEMENT_GAME_MODULE : κ²μ λͺ¨λ
- κ²μ μ μ κ΄λ ¨ λͺ¨λ
- IMPLEMENT_PRIMARY_GAME_MODULE : μ£Ό κ²μ λͺ¨λ
- κ²μ μ μμ κ°μ₯ μ€μ¬μ΄ λλ μ 체μ μΈ κ²μ λμνλλ° μ¬μ©νλ λ‘μ§μ λͺ¨μλ λͺ¨λ
- IMPLEMENT_MODULE : μΌλ° λͺ¨λ
- μΌλ°μ μΌλ‘ κ²μ νλ‘μ νΈλ μ£Ό κ²μ λͺ¨λμ νλ μ μΈν΄μΌ ν¨
- μΈν
μ κ°μΆ ν uproject νμΌμ μ°ν΄λ¦ν΄μ Generate Visual Studio project files. λ©λ΄λ₯Ό μ ν
- Unreal Version Selector νλ‘κ·Έλ¨μ΄ μμμ μΈλ¦¬μΌ λΉλ ν΄μ κ°λν΄μ Intermediate ν΄λμ κ΄λ ¨λ νλ‘μ νΈ νμΌμ μλμΌλ‘ μμ±ν΄ μ€
- Source ν΄λλ₯Ό κ·μΉμ λ§κ² ꡬμ±νλ©΄ Intermediate ν΄λλ μΈμ λ μ§ μ¬μμ± κ°λ₯
π© λͺ¨λ κ°μ μ’ μ κ΄κ³
- λͺ¨λ μ¬μ΄μ μ’ μ κ΄κ³λ₯Ό μ€μ ν΄ λ€μν κΈ°λ₯μ ꡬν
- μ°λ¦¬κ° λ§λλ λͺ¨λλ μΈλ¦¬μΌ μμ§μ΄ λ§λ λͺ¨λμ νμ©ν΄μΌ ν¨
- μΈλ¦¬μΌ μμ§μ΄ μ 곡νλ λͺ¨λ μ¬μ΄μλ μ’ μ κ΄κ³κ° μμ
- νλμ λͺ¨λμ λ무 λ§μ μ½λκ° λ€μ΄κ°λ©΄ μΈλ¦¬μΌ μμ§μ λΉλ λ°©μμ λ³κ²½
- νλ‘μ νΈκ° μ»€μ§ μλ‘ λͺ¨λμ λλ μ κ΄λ¦¬νλ κ²μ΄ μ 리
π© λͺ¨λμ 곡κ°μ μ°Έμ‘°
- λͺ¨λ λ΄ μμ€λ₯Ό νμν λ§νΌλ§ 곡κ°ν΄μΌ λͺ¨λ κ° μμ‘΄μ±μ μ€μ΄κ³ μ»΄νμΌ νμμ μ΅μν ν μ μμ
- 곡κ°ν νμΌμ λͺ¨λ Public ν΄λλ‘
- λΉκ³΅κ° νμΌμ λͺ¨λ Private ν΄λλ‘
- μΈλΆλ‘ 곡κ°ν ν΄λμ€ μ μΈμλ {λͺ¨λμ΄λ¦}_DLL λ§€ν¬λ‘
- μλΈ λͺ¨λ μ€μ μ μλ£νλ©΄ μ£Όκ²μ λͺ¨λμ Bulid.cs μ€μ μμ μλΈ λͺ¨λμ μ΄λ¦μ λ£μ΄μ£Όλ©΄ λ¨
5. νλ¬κ·ΈμΈ ꡬ쑰
- νλ¬κ·ΈμΈ : λ€μμ λͺ¨λκ³Ό κ²μ μ½ν μΈ λ₯Ό ν¬ν¨νλ ν¬μ₯ λ¨μ
- μλν° μ€μ μ ν΅ν΄ μ μ°νκ² νλ¬κ·ΈμΈ μΆκ° μμ κ°λ₯
- νλ¬κ·ΈμΈ ꡬ쑰
- νλ¬κ·ΈμΈ λͺ μΈμ (uplugin νμΌ)
- νλ¬κ·ΈμΈ 리μμ€ (Resource ν΄λ, μλν° λ©λ΄μ© μμ΄μ½)
- μ½ν μΈ
- λͺ¨λ ν΄λ
- Plugins ν΄λλ₯Ό λ§λ€μ΄μ€μΌ ν¨
- μλν° λ©λ΄λ₯Ό ν΅ν΄μλ uplugin νμΌ μΆκ° κ°λ₯
- λ΄λΆ ꡬ쑰λ μλμ κ°μ λ°©μ
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"FriendlyName": "GameUtility",
"Modules": [
{
"Name": "CommonUtility",
"Type": "Runtime",
"LoadingPhase": "Default"
}
]
}
6. κ²μ λΉλ
- κ²μ νκ² μ€μ μ μΆκ°νλ©΄ κ²μ λΉλ μ΅μ μ΄ μΆκ°
- κ²μ νκ²μΌλ‘ λΉλλ λͺ¨λμ μ μ λΌμ΄λΈλ¬λ¦¬λ‘ μ€ν νμΌμ ν¬ν¨
- κ²μμ΄ μ€νλκΈ° μν΄μλ μ€ν νμΌκ³Ό μ½ν μΈ μμ μ΄ ν¨κ» μμ΄μΌ ν¨
- λΉλ : μ€ν νμΌμ μμ±νκΈ° μν μ»΄νμΌ
- μΏ νΉ : μ§μ ν νλ«νΌμ λ§μΆ° μ½ν μΈ μμ μ λ³ννλ μμ
- ν¨ν€μ§ : μ΄λ€μ λͺ¨λ λͺ¨μμ νλμ νλ‘κ·Έλ¨μΌλ‘ λ§λλ μμ
- νκ² μ€μ μΆκ°
- Shipping λΉλκ° λ°°ν¬ν μ΅μ’ κ²μμ μ½λλ₯Ό λ§λλ μμ
μ°Έκ³ μλ£