Unreal Engine 5에서 블루프린트(Blueprint)는 게임 로직을 시각적으로 스크립팅할 수 있는 강력한 도구입니다. 블루프린트에서 자주 사용하는 기능 중 하나가 “함수(Functions)”와 “매크로(Macros)”인데, 이 둘은 서로 비슷해 보이지만 사용 용도와 특성이 다릅니다. 각 기능을 자세히 설명하고 예제도 포함하여 알아보겠습니다.
1. 함수 (Functions)
- 설명:
- 함수는 특정 작업을 수행하는 코드 블록으로, 입력(Parameters)을 받아 작업을 수행한 후 결과를 반환(Return)할 수 있습니다.
- 함수를 만들면 여러 곳에서 재사용할 수 있어 코드의 중복을 줄이고 유지보수를 쉽게 합니다.
- 블루프린트 함수는 기본적으로 순차적으로 실행됩니다.
- 함수 내부에서만 사용할 수 있는 지역 변수(Local Variables)를 가질 수 있습니다.
- 특징:
- 함수를 호출하면 해당 함수로 실행 흐름이 이동한 후, 함수가 끝나면 원래 위치로 돌아옵니다.
- 복잡한 로직을 작은 단위로 분할하여 가독성을 높일 수 있습니다.
- 순수 함수(Pure Function)를 만들 수 있으며, 이는 동일한 입력에 대해 항상 동일한 결과를 반환하고 외부 상태를 변경하지 않습니다.
- 예제:
- 캐릭터의 체력을 회복하는 함수:
pseudo Function RestoreHealth(CurrentHealth: float, HealAmount: float) -> float NewHealth = CurrentHealth + HealAmount Return NewHealth
이 함수는 현재 체력과 회복량을 받아 새로운 체력을 반환합니다.
2. 매크로 (Macros)
- 설명:
- 매크로는 함수와 유사하게 특정 작업을 수행하는 코드 블록이지만, 함수보다 더 유연하고 여러 실행 핀(Execution Pin)을 가질 수 있습니다.
- 매크로는 블루프린트의 노드를 그룹화하여 하나의 노드로 사용할 수 있는 기능을 제공합니다.
- 블루프린트 에디터 내에서 시각적으로 로직을 표현할 때 노드의 수를 줄이는 데 유용합니다.
- 특징:
- 매크로는 여러 실행 핀을 가질 수 있어 여러 곳에서 다른 실행 흐름을 시작할 수 있습니다.
- 입력과 출력은 함수와 마찬가지로 사용할 수 있지만, 함수와 달리 매크로 내부에서만 동작합니다.
- 매크로는 복사하여 사용할 때 각각의 인스턴스가 독립적으로 작동합니다.
- 예제:
- 입력이 0이면 “Zero”를, 그렇지 않으면 “Non-Zero”를 출력하는 매크로:
pseudo Macro CheckZero(Input: int) If Input == 0 Print "Zero" Else Print "Non-Zero"
이 매크로는 입력값에 따라 다른 실행 흐름을 제공합니다.
3. 함수와 매크로의 차이점
- 재사용성:
- 함수는 재사용이 용이하며, 다른 블루프린트에서 호출할 수 있습니다.
- 매크로는 주로 현재 블루프린트 내에서만 사용되며, 다른 곳에서 호출하기 어렵습니다.
- 실행 흐름:
- 함수는 하나의 진입점(Execution Pin)과 하나의 종료점(Return Node)을 가집니다.
- 매크로는 여러 개의 실행 핀을 가질 수 있어 더 복잡한 실행 흐름을 만들 수 있습니다.
- 지역 변수 사용:
- 함수는 지역 변수를 사용할 수 있지만, 매크로는 사용할 수 없습니다.
- 성능:
- 함수는 호출될 때 스택 메모리를 사용하고, 반환되면 스택에서 제거됩니다.
- 매크로는 인라인 방식으로 작동하여 호출 시 성능 오버헤드가 없습니다.
4. 언제 무엇을 사용해야 하는가?
- 함수 사용:
- 로직을 여러 번 재사용해야 할 때
- 입력에 대해 동일한 결과를 반환해야 할 때
- 코드의 가독성을 높이고 싶을 때
- 매크로 사용:
- 여러 실행 흐름을 처리해야 할 때
- 간단한 로직을 그룹화하여 블루프린트 그래프를 정리하고 싶을 때
- 인라인으로 처리되어야 하는 로직일 때
이렇게 함수를 사용하면 로직을 모듈화하고 유지보수를 쉽게 할 수 있으며, 매크로를 사용하면 블루프린트 그래프를 깔끔하게 정리할 수 있습니다. 상황에 따라 적절한 방식을 선택하여 사용하면 더 효율적인 블루프린트를 작성할 수 있습니다.