βš™οΈ μ—”μ§„/🍫 언리얼

[Unreal] 언리얼 λΉŒλ“œ μ‹œμŠ€ν…œ

peewoong 2024. 5. 8. 19:06

1. 언리얼 에디터 ꡬ성

  • κ²Œμž„ μ œμž‘μ„ μœ„ν•΄ 에픽 κ²Œμž„μ¦ˆκ°€ μ œκ³΅ν•˜λŠ” μ €μž‘ 도ꡬ
  • 언리얼 μ—”μ§„μ˜ ꡬ성
    • 에디터 : κ²Œμž„ μ œμž‘μ„ μœ„ν•΄ μ œκ³΅λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨ (일반적으둜 μΈμ‹ν•˜λŠ” 언리얼 μ—”μ§„)
    • κ²Œμž„ λΉŒλ“œ : exe 파일과 λ¦¬μ†ŒμŠ€λ‘œ 이루어진 λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•˜λŠ” κ²Œμž„ ν΄λΌμ΄μ–ΈνŠΈ
  • 언리얼 μ—λ””ν„°μ˜ νŠΉμ§•
    • κ²Œμž„ 개발 μž‘μ—…μ„ μœ„ν•΄ λ‹€μ–‘ν•œ 폴더와 파일 이름 κ·œμΉ™μ΄ 미리 μ„€μ •λ˜μ–΄ μžˆλ‹€.
    • μ •ν•΄μ§„ κ·œμΉ™μ„ 잘 νŒŒμ•…ν•˜κ³  ν”„λ‘œμ νŠΈ 폴더와 νŒŒμΌμ„ μ„€μ •ν•΄μ•Ό 함
  • μ—λ””ν„°μ—μ„œ κΈ°ν™•κ³Ό κ°œλ°œμ„ μ™„λ£Œν•œ ν›„, κ²Œμž„ λΉŒλ“œλ₯Ό 톡해 μ΅œμ’… κ²Œμž„ λΉŒλ“œλ₯Ό μ œμž‘ν•˜λ„λ‘ μ„€μ •
  • 언리얼 μ—λ””ν„°μ—μ„œ κ²Œμž„μ„ ꡬ성 πŸ‘‰ κ²Œμž„ λΉŒλ“œλ₯Ό μˆ˜ν–‰ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ νŒ¨ν‚€μ§•

 

2. 언리얼 μ—λ””ν„°μ˜ λ™μž‘

  • ν”„λ‘œμ νŠΈ ν΄λ”μ˜ uproject ν™•μž₯자λ₯Ό λ”λΈ”ν΄λ¦­ν•˜λ©΄ 에디터가 트리거 됨
  • μ—λ””ν„°μ˜ μ‹€ν–‰ 방식
    • uproject ν™•μž₯μžλŠ” μœˆλ„μš° λ ˆμ§€μŠ€νŠΈλ¦¬μ— λ“±λ‘λ˜μ–΄ 있음
      • 등둝이 μ•ˆλ˜μ–΄ μžˆλ‹€λ©΄ 런처λ₯Ό μ‹€ν–‰ν•΄ 등둝
    • UnrealVersionSelector ν”„λ‘œκ·Έλž¨μœΌλ‘œ ν”„λ‘œμ νŠΈ 정보가 λ„˜κ²¨μ§
    • UnrealVersionSelectorλŠ” λŸ°μ²˜κ°€ μ €μž₯ν•œ 에디터 μ •λ³΄λ‘œλΆ€ν„° 버전에 λ§žλŠ” 에디터λ₯Ό 싀행함
  • 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 : μ£Ό κ²Œμž„ λͺ¨λ“ˆ
      • κ²Œμž„ μ œμž‘μ— κ°€μž₯ 쀑심이 λ˜λŠ” 전체적인 κ²Œμž„ λ™μž‘ν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ” λ‘œμ§μ„ λͺ¨μ•„λ‘” λͺ¨λ“ˆ
  • 일반적으둜 κ²Œμž„ ν”„λ‘œμ νŠΈλŠ” μ£Ό κ²Œμž„ λͺ¨λ“ˆμ„ ν•˜λ‚˜ μ„ μ–Έν•΄μ•Ό 함
  • μ„ΈνŒ…μ„ κ°–μΆ˜ ν›„ 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 λΉŒλ“œκ°€ 배포할 μ΅œμ’… κ²Œμž„μ˜ μ½”λ“œλ₯Ό λ§Œλ“œλŠ” μž‘μ—…

참고 자료

https://velog.io/@blue_archive/UE5-%EC%9D%B4%EB%93%9D%EC%9A%B0-Part-1.-15%EA%B0%95-%EC%96%B8%EB%A6%AC%EC%96%BC-%EB%B9%8C%EB%93%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C