매크로 생성 및 간단한 사용 예
앞서 함수를 통해 반복되는 로직을 묶어 재사용하는 방법을 알아보았습니다. 블루프린트에는 함수와 유사하면서도 다른 특징을 가진 또 다른 재사용 가능한 로직 묶음인 매크로(Macro) 가 있습니다. 매크로는 특정 노드들의 조합을 하나의 블록으로 만들어, 블루프린트 그래프를 더욱 깔끔하고 읽기 쉽게 만드는 데 도움을 줍니다.
함수와 매크로는 모두 재사용 가능한 로직 묶음이라는 공통점을 가지고 있지만, 내부적으로 작동하는 방식과 사용 시점에 미묘한 차이가 있습니다. 매크로는 함수와 달리 컴파일 시 해당 매크로 내부의 노드들이 호출 위치에 그대로 복사되어 붙여넣어지는 방식으로 작동합니다. 이는 템플릿처럼 작동한다고 이해하시면 됩니다.
매크로란 무엇인가?
매크로는 여러 개의 노드를 하나로 묶어놓은 재사용 가능한 그래프 조각입니다. 매크로는 함수처럼 입출력 핀을 가질 수 있으며, 복잡한 로직을 추상화하여 블루프린트 그래프의 가독성을 크게 향상시킵니다. 특히, 매크로는 함수가 제공하지 않는 특정 유연성을 제공하여, 특정 상황에서 함수보다 더 적합할 수 있습니다.
매크로 정의 및 생성하기
매크로를 생성하는 과정은 함수와 매우 유사합니다.
매크로 생성하기
- 블루프린트 에디터의 좌측 함수(Functions) 패널 바로 아래에 있는 매크로(Macros) 패널로 이동합니다.
- 패널 상단의
+ 매크로(+ Macro)
버튼을 클릭합니다. - 새로운 매크로가 생성되면 이름을 입력합니다. (예:
PrintDebugMessage
) - 함수와 마찬가지로, 매크로 이름 옆에 새로운 탭이 열리면서 해당 매크로를 정의하는 공간이 나타납니다.
입력 및 출력 핀 추가하기
- 매크로 정의 그래프에서
Input
노드와Output
노드를 찾습니다. 이 노드들은 매크로의 입출력을 정의합니다. - 디테일 패널에서
Input
노드를 선택한 후,Inputs
섹션에 있는+
버튼을 클릭하여 입력 핀을 추가합니다. 예를 들어,Message
(Text 타입)와Duration
(Float 타입)이라는 입력 핀을 추가할 수 있습니다. - 마찬가지로
Output
노드를 선택하여 출력 핀을 추가할 수 있습니다. 매크로는 여러 개의 실행 출력 핀을 가질 수 있다는 점에서 함수와 차이가 있습니다. (함수는 일반적으로 하나의 실행 출력 핀만 가집니다.)
매크로 로직 구현하기
- 매크로 정의 그래프에서 입력 핀을 통해 전달받은 데이터를 사용하여 로직을 구성합니다.
- 예를 들어,
PrintDebugMessage
매크로라면,Message
입력 값을 화면에 출력하는Print String
노드를 사용하고,Duration
입력 값을Print String
노드의Duration
핀에 연결할 수 있습니다.Input
노드의 실행 핀을Print String
노드의 실행 핀에 연결합니다.Input
노드의Message
출력 핀을Print String
노드의In String
입력 핀에 연결합니다.Input
노드의Duration
출력 핀을Print String
노드의Duration
입력 핀에 연결합니다.Print String
노드의 실행 출력 핀을Output
노드의 실행 입력 핀에 연결합니다.
컴파일 및 저장: 매크로를 정의한 후에는 반드시 컴파일하고 저장해야 변경 사항이 적용됩니다.
매크로 사용 예시: 간편한 디버그 메시지 출력
이제 정의한 PrintDebugMessage
매크로를 이벤트 그래프에서 사용해 봅시다.
이벤트 그래프
탭을 클릭하여 메인 그래프로 돌아옵니다.
Event BeginPlay
노드 뒤에 우리가 만든 매크로를 호출하는 노드를 배치합니다.
이벤트 그래프의 빈 공간에서 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴를 엽니다.
검색창에 PrintDebugMessage
를 입력하고 해당 매크로를 선택합니다.
- 또는, 좌측 매크로(Macros) 패널에서 해당 매크로를 찾아 그래프로 드래그 앤 드롭해도 됩니다.
Event BeginPlay
의 실행 핀을 PrintDebugMessage
매크로 노드의 실행 핀에 연결합니다.
PrintDebugMessage
노드의 Message
입력 핀에 "매크로를 이용한 메시지!"라고 입력합니다.
Duration
입력 핀에 5.0
을 입력하여 메시지가 5초 동안 표시되도록 설정합니다.
블루프린트를 컴파일하고 저장한 후 게임을 실행하면, 화면에 "매크로를 이용한 메시지!"라는 메시지가 5초 동안 출력되는 것을 확인할 수 있습니다.
이처럼 매크로를 사용하면 복잡한 노드 그룹을 하나의 간결한 블록으로 만들 수 있습니다. 특히, 자주 사용하지만 여러 입출력 흐름을 가져야 하거나, 특정 노드의 내부 구조를 그대로 복사해야 하는 경우에 매우 유용합니다.
함수와 매크로의 차이점 및 적절한 사용 시점
함수와 매크로는 모두 재사용성을 위한 도구이지만, 그 특성 때문에 적절한 사용 시점이 다릅니다.
특징 | 함수 (Function) | 매크로 (Macro) |
---|---|---|
작동 방식 | 별도의 서브루틴으로 컴파일되고 호출됩니다. | 컴파일 시 매크로 내부의 노드들이 호출 지점에 그대로 복사됩니다. |
실행 흐름 | 하나의 실행 입력/출력 핀만 가질 수 있습니다. | 여러 개의 실행 입력/출력 핀을 가질 수 있어 복잡한 분기 흐름을 제어하는 데 유용합니다. |
로컬 변수 | 함수 내에서 정의된 로컬 변수는 함수가 끝날 때 사라집니다. | 로컬 변수를 가질 수 없습니다. 매크로 내부의 변수는 호출하는 블루프린트의 변수로 직접 연결됩니다. |
재귀 호출 | 자기 자신을 호출하는 재귀 호출이 가능합니다. | 재귀 호출이 불가능합니다. |
디버깅 | 함수 호출 시 함수 내부로 진입하여 디버깅할 수 있습니다. | 매크로 노드를 디버깅할 때 내부 노드들이 펼쳐져 보여집니다. |
주요 용도 | 특정 기능의 캡슐화, 재사용 가능한 일반적인 작업. | 특정 흐름 제어 노드 조합, 반복적인 패턴. |
언제 무엇을 사용해야 할까요?
- 함수: 특정 기능을 깔끔하게 묶어 재사용하고 싶을 때, 재귀 호출이 필요하거나 로컬 변수를 사용하여 데이터 범위를 제한하고 싶을 때 사용합니다. 예를 들어, "체력 감소 로직", "아이템 사용 효과", "특정 계산" 등.
- 매크로: 여러 개의 실행 흐름이 필요하거나,
Sequence
,Branch
,Loop
등 복잡한 흐름 제어 노드를 특정 패턴으로 묶어 재사용하고 싶을 때 유용합니다. 또는 단순히 그래프의 가독성을 높이고 싶을 때도 사용합니다. 예를 들어, "안전한 대미지 적용 (체력 0 이하로 안 내려가게)", "특정 조건 시 여러 이벤트 순차 실행" 등.
처음에는 함수와 매크로의 구분이 모호하게 느껴질 수 있지만, 실제로 블루프린트를 작성하면서 이들의 특징을 이해하고 적절히 활용하는 연습을 하다 보면 자연스럽게 숙달될 것입니다.
이번 절에서는 블루프린트의 또 다른 재사용 단위인 매크로의 개념, 생성 및 활용법, 그리고 함수와의 차이점에 대해 알아보았습니다. 이제 블루프린트의 기본적인 요소인 변수, 함수, 이벤트, 흐름 제어, 그리고 매크로에 대한 이해를 바탕으로, 더 복잡한 로직을 구축할 준비가 되었습니다.