icon안동민 개발노트

구조체와 열거형의 기본 이해


 블루프린트에서 구조체(Struct)와 열거형(Enum)은 데이터를 효과적으로 구조화하고 관리하는 데 사용되는 중요한 도구입니다.

 이들을 활용하면 복잡한 데이터 유형을 쉽게 정의하고 사용할 수 있으며, 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다.

구조체 (Struct)

 개념과 목적

  • 정의 : 여러 변수를 하나의 단위로 그룹화한 복합 데이터 타입
  • 목적 : 관련된 데이터를 논리적으로 묶어 관리하고 재사용성을 높임

 구조체 생성 방법

  1. 콘텐츠 브라우저에서 우클릭
  2. 'Blueprint Class' 선택 후 'Structure' 선택
  3. 구조체 이름 지정 (예 : S_PlayerStats)
구조체 생성 과정

 구조체 정의 예제

Struct: S_PlayerStats
Variables:
  - Health (Float)
  - Mana (Float)
  - Strength (Integer)
  - Dexterity (Integer)
  - Level (Integer)

 구조체 변수 생성 및 접근

  1. 변수 생성
  • 'My Blueprint' 패널에서 변수 추가
  • 변수 유형을 생성한 구조체로 설정
  1. 변수 접근
  • Get 노드를 사용하여 전체 구조체 가져오기
  • Break 노드를 사용하여 개별 멤버에 접근
구조체 변수 접근 예시

 구조체 사용 예제

Blueprint: BP_Player
Variables:
  - PlayerStats (S_PlayerStats)
 
Function: InitializePlayer
[Make S_PlayerStats] --> [Set PlayerStats]
   |
   +--> [Set Health = 100]
   +--> [Set Mana = 50]
   +--> [Set Strength = 10]
   +--> [Set Dexterity = 8]
   +--> [Set Level = 1]
 
Function: LevelUp
[Break PlayerStats] --> [Add 1 to Level]
                    --> [Increase Health by 10]
                    --> [Increase Mana by 5]
[Make S_PlayerStats] --> [Set PlayerStats]

열거형 (Enum)

 개념과 목적

  • 정의 : 명명된 상수 집합을 정의하는 사용자 정의 데이터 타입
  • 목적 : 관련된 상수들을 그룹화하여 코드의 가독성과 유지보수성 향상

 열거형 생성 방법

  1. 콘텐츠 브라우저에서 우클릭
  2. 'Blueprint Class' 선택 후 'Enumeration' 선택
  3. 열거형 이름 지정 (예 : E_PlayerState)
열거형 생성 과정

 열거형 정의 예제

Enum: E_PlayerState
Values:
  - Idle
  - Walking
  - Running
  - Jumping
  - Attacking

 열거형 사용법

  1. 변수 생성
  • 변수 유형을 생성한 열거형으로 설정
  1. 값 설정 및 비교
  • Set 노드로 값 설정
  • Equal (==) 노드로 값 비교
  1. 스위치 문과 연계
  • Switch on E_PlayerState 노드 사용
열거형 스위치 문 사용 예시

 열거형 사용 예제

Blueprint: BP_Player
Variables:
  - CurrentState (E_PlayerState)
 
Function: UpdatePlayerState
[Get Input Vector] --> [Branch: Magnitude > 0?]
                          |
    [Set CurrentState = Walking] <-- [True]
                          |
      [Set CurrentState = Idle] <-- [False]
 
Function: HandlePlayerAction
[Switch on CurrentState]
  |
  +--> [Case Idle: Allow Action]
  +--> [Case Walking: Allow Action]
  +--> [Case Attacking: Prevent Action]

데이터 구조화와 코드 가독성 향상 팁

  1. 의미 있는 이름 사용
  • 구조체와 열거형에 명확하고 설명적인 이름 부여
  • 예 : S_PlayerInventoryItem, E_WeaponType
  1. 관련 데이터 그룹화
  • 논리적으로 연관된 데이터를 구조체로 묶기
  • 예 : S_WeaponStats (데미지, 사거리, 발사 속도 등)
  1. 열거형을 활용한 상태 관리
  • 객체의 상태나 유형을 열거형으로 정의
  • 예 : E_EnemyBehavior (순찰, 추적, 공격, 도망)
  1. 중첩 구조체 활용
  • 복잡한 데이터 구조를 중첩 구조체로 표현
  • 예 : S_GameSave (플레이어 정보, 인벤토리, 퀘스트 상태 등)
  1. 주석 활용
  • 구조체와 열거형의 목적과 사용법에 대한 주석 추가
  1. 기본값 설정
  • 구조체 멤버의 적절한 기본값 설정으로 초기화 용이성 증대

예제 : 아이템 시스템

Enum: E_ItemType
Values:
  - Weapon
  - Armor
  - Consumable
  - Quest
 
Struct: S_ItemProperties
Variables:
  - Name (String)
  - Description (String)
  - ItemType (E_ItemType)
  - Value (Integer)
  - Weight (Float)
 
Blueprint: BP_InventoryManager
Variables:
  - Inventory (Array of S_ItemProperties)
 
Function: AddItem
[Make S_ItemProperties] --> [Add to Inventory Array]
   |
   +--> [Set Name]
   +--> [Set Description]
   +--> [Set ItemType]
   +--> [Set Value]
   +--> [Set Weight]
 
Function: UseItem
[Get Selected Item] --> [Switch on ItemType]
                          |
        [Apply Weapon Effect] <-- [Case Weapon]
                          |
        [Equip Armor] <-- [Case Armor]
                          |
        [Consume Item] <-- [Case Consumable]
                          |
        [Advance Quest] <-- [Case Quest]

 이 예제에서는 구조체와 열거형을 사용하여 게임의 아이템 시스템을 구현합니다. E_ItemType 열거형은 아이템의 유형을 정의하고, S_ItemProperties 구조체는 각 아이템의 속성을 그룹화합니다. 이를 통해 아이템 데이터를 체계적으로 관리하고, 아이템 유형에 따른 다양한 동작을 쉽게 구현할 수 있습니다.

 구조체와 열거형을 효과적으로 활용하면 블루프린트의 복잡성을 줄이고 데이터 관리를 용이하게 할 수 있습니다. 이는 특히 대규모 프로젝트에서 코드의 조직화와 유지보수성을 크게 향상시킵니다. 구조체와 열거형의 사용을 통해 데이터 구조를 명확히 정의하고, 이를 바탕으로 일관성 있는 로직을 구현함으로써 더욱 견고하고 확장 가능한 게임 시스템을 만들 수 있습니다.