구조체와 열거형의 기본 이해
지금까지 블루프린트를 이용한 게임 로직 구현의 핵심적인 요소들을 학습했습니다. 변수, 함수, 이벤트, 흐름 제어, 그리고 통신 기법 등은 모두 게임의 '행동'을 정의하는 데 중요합니다. 하지만 효율적인 게임 개발을 위해서는 데이터를 체계적으로 '관리'하는 것도 매우 중요합니다. 이번 장에서는 언리얼 엔진 블루프린트에서 데이터를 효과적으로 구조화하고 분류하는 데 사용되는 구조체(Struct) 와 열거형(Enum) 에 대해 알아보겠습니다.
구조체와 열거형의 기본 이해
게임 데이터는 단순히 개별적인 변수들의 나열이 아닙니다. 캐릭터의 능력치, 아이템의 속성, 퀘스트 정보 등은 서로 연관된 여러 개의 데이터 조각들로 구성됩니다. 구조체와 열거형은 이러한 연관된 데이터를 묶거나, 특정 값을 명확하게 분류하는 데 사용되어 블루프린트의 가독성과 유지보수성을 크게 향상시킵니다.
구조체 (Structure, Struct)
구조체는 서로 다른 유형의 여러 변수들을 하나의 논리적인 묶음으로 정의할 수 있는 사용자 정의 데이터 타입입니다. 마치 사람을 나타낼 때 '이름', '나이', '성별', '키' 등 여러 정보를 묶어서 '사람 정보'라는 하나의 단위로 다루는 것과 같습니다.
구조체가 필요한 이유
- 데이터의 논리적 그룹화: 관련된 데이터를 하나의 변수처럼 관리할 수 있어 코드가 깔끔해집니다.
- 가독성 향상: 어떤 데이터가 서로 연관되어 있는지 명확하게 알 수 있습니다.
- 재사용성: 한 번 정의된 구조체는 여러 블루프린트에서 동일한 형태로 재사용할 수 있습니다.
- 오류 감소: 각 데이터를 개별적으로 관리할 때 발생할 수 있는 휴먼 에러를 줄일 수 있습니다.
구조체 생성 및 정의
콘텐츠 브라우저에서 마우스 오른쪽 버튼을 클릭합니다.
블루프린트(Blueprints)
> 구조체(Structure)
를 선택합니다.
이름을 지정합니다. (예: F_CharacterStats
- 일반적으로 구조체 이름에는 F
접두사를 사용합니다.)
생성된 구조체 에셋을 더블클릭하여 구조체 에디터를 엽니다.
+ 새 변수(+ New Variable)
버튼을 클릭하여 구조체에 포함될 멤버 변수들을 추가합니다. 각 변수의 이름과 유형을 지정합니다.
- 예시:
Health
(Float),AttackDamage
(Float),Defense
(Float),CharacterName
(Text)
저장 버튼을 클릭하여 구조체 정의를 저장합니다.
구조체 활용
이제 정의된 구조체를 일반 변수처럼 사용할 수 있습니다.
블루프린트에서 구조체 변수 생성
- 액터 블루프린트(예:
BP_PlayerCharacter
)를 엽니다. - 변수 패널에서 새 변수를 추가합니다.
- 변수 유형을 검색창에 여러분이 만든 구조체 이름(예:
F_CharacterStats
)을 입력하여 선택합니다. - 변수 이름을
MyStats
와 같이 지정합니다.
구조체 변수 값 설정 및 가져오기
MyStats
변수(Get 노드)를 이벤트 그래프에 가져옵니다.MyStats
출력 핀에서 드래그하여Break F_CharacterStats
노드를 검색하고 선택합니다. 이 노드는 구조체를 구성하는 개별 멤버 변수들로 분리해줍니다. 이제 각 멤버 변수 값을 개별적으로 가져와 사용할 수 있습니다.Make F_CharacterStats
노드를 사용하여 개별 값을 합쳐 하나의 구조체 변수를 만들 수도 있습니다. 이 노드의 입력 핀에 각 멤버 변수 값을 연결하고, 출력 핀을Set MyStats
노드의 입력 핀에 연결합니다.- 예시:
Event BeginPlay
에서MyStats
변수에Make F_CharacterStats
를 연결하여Health
를 100,AttackDamage
를 20 등으로 초기화합니다. 이후Print String
노드에서Break F_CharacterStats
를 통해CharacterName
과Health
를 가져와 출력할 수 있습니다.
열거형 (Enumeration, Enum)
열거형은 명확하게 정의된 여러 개의 명명된 정수 값 목록을 나타내는 사용자 정의 데이터 타입입니다. 제한된 선택지 중에서 하나를 선택해야 할 때 유용하며, 코드의 가독성을 높이고 오타로 인한 오류를 방지하는 데 도움을 줍니다. 마치 '요일'을 월, 화, 수, 목, 금, 토, 일로 명확하게 정의하는 것과 같습니다.
열거형이 필요한 이유
- 의미 부여: 정수 값에 의미 있는 이름을 부여하여 코드의 가독성을 높입니다. (예: 0 대신
E_GameState_MainMenu
) - 오류 방지: 허용되지 않는 값을 할당하는 것을 컴파일 시점에서 방지합니다.
- 제한된 선택지 표현: 특정 변수가 가질 수 있는 값을 제한할 때 사용합니다.
- 스위치 노드와의 연동:
Switch on Enum
노드와 함께 사용하여 실행 흐름을 명확하게 분기할 수 있습니다.
열거형 생성 및 정의
콘텐츠 브라우저에서 마우스 오른쪽 버튼을 클릭합니다.
블루프린트(Blueprints)
> 열거형(Enumeration)
을 선택합니다.
이름을 지정합니다. (예: E_GameState
- 일반적으로 열거형 이름에는 E_
접두사를 사용합니다.)
생성된 열거형 에셋을 더블클릭하여 열거형 에디터를 엽니다.
+ 새 이넘 추가(+ New Enum)
버튼을 클릭하여 열거형의 멤버들을 추가합니다. 각 멤버에 의미 있는 이름을 부여합니다.
- 예시:
MainMenu
,Playing
,Paused
,GameOver
저장 버튼을 클릭하여 열거형 정의를 저장합니다.
열거형 활용
정의된 열거형은 상태를 표현하는 변수에 특히 유용합니다.
블루프린트에서 열거형 변수 생성
BP_GameManager
블루프린트(또는 다른 적절한 블루프린트)를 엽니다.- 변수 패널에서 새 변수를 추가합니다.
- 변수 유형을 여러분이 만든 열거형 이름(예:
E_GameState
)을 입력하여 선택합니다. - 변수 이름을
CurrentGameState
와 같이 지정합니다. - 디테일 패널에서 기본값을 설정할 수 있습니다. (예:
MainMenu
)
열거형 값 설정 및 스위치 노드 활용
Event BeginPlay
에서Set CurrentGameState
노드를 사용하여 게임 상태를MainMenu
로 설정합니다.Get CurrentGameState
변수 노드를 이벤트 그래프에 가져옵니다.CurrentGameState
출력 핀에서 드래그하여Switch on E_GameState
노드를 검색하고 선택합니다. 이 노드는 열거형 변수의 현재 값에 따라 다른 실행 핀을 활성화합니다.- 각 열거형 멤버(MainMenu, Playing 등)에 해당하는 실행 핀 뒤에 해당 상태일 때 수행될 로직을 연결합니다.
- 예시:
MainMenu
핀에는 "메인 메뉴 화면 출력" 로직을,Playing
핀에는 "게임 플레이 시작" 로직을 연결할 수 있습니다.
구조체와 열거형은 블루프린트 로직의 복잡성을 줄이고, 데이터를 보다 체계적으로 관리하여 개발 효율성을 높이는 데 필수적인 도구입니다. 특히 복잡한 게임 시스템을 설계할 때 이들을 적절히 활용하면, 블루프린트 그래프가 훨씬 간결해지고 유지보수가 용이해질 것입니다.
이번 절에서는 블루프린트에서 데이터를 체계적으로 관리하는 데 사용되는 구조체와 열거형의 기본 개념과 활용법에 대해 알아보았습니다. 이들은 단순한 변수들의 나열을 넘어, 데이터에 의미와 구조를 부여하는 중요한 역할을 합니다.