구조체와 열거형의 기본 이해
블루프린트에서 구조체(Struct)와 열거형(Enum)은 데이터를 효과적으로 구조화하고 관리하는 데 사용되는 중요한 도구입니다.
이들을 활용하면 복잡한 데이터 유형을 쉽게 정의하고 사용할 수 있으며, 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다.
구조체 (Struct)
개념과 목적
- 정의 : 여러 변수를 하나의 단위로 그룹화한 복합 데이터 타입
- 목적 : 관련된 데이터를 논리적으로 묶어 관리하고 재사용성을 높임
구조체 생성 방법
- 콘텐츠 브라우저에서 우클릭
- 'Blueprint Class' 선택 후 'Structure' 선택
- 구조체 이름 지정 (예 : S_PlayerStats)
구조체 정의 예제
Struct: S_PlayerStats
Variables:
- Health (Float)
- Mana (Float)
- Strength (Integer)
- Dexterity (Integer)
- Level (Integer)
구조체 변수 생성 및 접근
1. 변수 생성
- 'My Blueprint' 패널에서 변수 추가
- 변수 유형을 생성한 구조체로 설정
2. 변수 접근
- 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)
개념과 목적
- 정의 : 명명된 상수 집합을 정의하는 사용자 정의 데이터 타입
- 목적 : 관련된 상수들을 그룹화하여 코드의 가독성과 유지보수성 향상
열거형 생성 방법
- 콘텐츠 브라우저에서 우클릭
- 'Blueprint Class' 선택 후 'Enumeration' 선택
- 열거형 이름 지정 (예 : E_PlayerState)
열거형 정의 예제
Enum: E_PlayerState
Values:
- Idle
- Walking
- Running
- Jumping
- Attacking
열거형 사용법
1. 변수 생성
- 변수 유형을 생성한 열거형으로 설정
2. 값 설정 및 비교
- Set 노드로 값 설정
- Equal (==) 노드로 값 비교
3. 스위치 문과 연계
- 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
2. 관련 데이터 그룹화
- 논리적으로 연관된 데이터를 구조체로 묶기
- 예 : S_WeaponStats (데미지, 사거리, 발사 속도 등)
3. 열거형을 활용한 상태 관리
- 객체의 상태나 유형을 열거형으로 정의
- 예 : E_EnemyBehavior (순찰, 추적, 공격, 도망)
4. 중첩 구조체 활용
- 복잡한 데이터 구조를 중첩 구조체로 표현
- 예 : S_GameSave (플레이어 정보, 인벤토리, 퀘스트 상태 등)
5. 주석 활용
- 구조체와 열거형의 목적과 사용법에 대한 주석 추가
6. 기본값 설정
- 구조체 멤버의 적절한 기본값 설정으로 초기화 용이성 증대
예제 : 아이템 시스템
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
구조체는 각 아이템의 속성을 그룹화합니다.
이를 통해 아이템 데이터를 체계적으로 관리하고, 아이템 유형에 따른 다양한 동작을 쉽게 구현할 수 있습니다.
구조체와 열거형을 효과적으로 활용하면 블루프린트의 복잡성을 줄이고 데이터 관리를 용이하게 할 수 있습니다.