함수 라이브러리 생성 및 활용
지금까지 우리는 블루프린트에서 변수, 함수, 매크로를 이용해 코드를 재사용하고, 데이터 테이블, 저장 게임 오브젝트, 에셋 레퍼런싱 등을 통해 데이터를 효율적으로 관리하는 방법을 배웠습니다. 이번 절에서는 이 모든 것을 아울러, 여러 블루프린트에서 공통적으로 사용되는 유틸리티성 함수들을 한곳에 모아 관리할 수 있는 강력한 기능인 블루프린트 함수 라이브러리(Blueprint Function Library) 에 대해 알아보겠습니다.
함수 라이브러리란 무엇인가?
블루프린트 함수 라이브러리는 특정 액터나 오브젝트에 종속되지 않고, 어디서든 호출할 수 있는 정적(Static) 함수들의 모음입니다. 즉, 특정 인스턴스(객체) 없이도 바로 호출하여 사용할 수 있는 기능들을 담는 블루프린트 클래스입니다.
일반적인 블루프린트의 함수는 해당 블루프린트의 인스턴스가 존재해야만 호출할 수 있습니다. 예를 들어, BP_PlayerCharacter
의 Jump
함수를 호출하려면 BP_PlayerCharacter
의 인스턴스가 있어야 합니다. 하지만 함수 라이브러리의 함수는 마치 Print String
노드처럼, 어떤 블루프린트에서든 바로 검색하여 사용할 수 있습니다.
함수 라이브러리가 필요한 이유
- 높은 재사용성: 게임 전반에 걸쳐 자주 사용되는 범용적인 유틸리티 기능을 한곳에 모아두면, 필요한 곳에서 쉽게 가져다 쓸 수 있습니다.
- 느슨한 결합: 특정 액터에 종속되지 않으므로, 다른 블루프린트와의 의존성을 줄여줍니다.
- 유지보수 용이성: 공통 기능이 수정될 경우, 함수 라이브러리에서 한 번만 수정하면 모든 호출 위치에 반영됩니다.
- 코드 깔끔함: 반복되는 로직을 함수 라이브러리로 분리하여 블루프린트 그래프를 간결하고 읽기 쉽게 만듭니다.
- 성능 최적화: 정적 함수는 특정 인스턴스에 대한 참조를 유지할 필요가 없으므로 미미하게나마 성능 이점을 가질 수 있습니다.
함수 라이브러리 생성 및 함수 정의
-
함수 라이브러리 블루프린트 생성
- 콘텐츠 브라우저에서 마우스 오른쪽 버튼을 클릭합니다.
블루프린트 클래스(Blueprint Class)
를 선택합니다.모든 클래스(All Classes)
를 펼친 후Blueprint Function Library
를 검색하여 선택합니다.- 이름을 지정합니다. (예:
BFL_GameUtilities
- 일반적으로 'BFL_' 접두사를 사용합니다.)
-
함수 라이브러리에 함수 정의
- 생성된
BFL_GameUtilities
블루프린트 에디터를 엽니다. - 일반 블루프린트와 유사하게 좌측 함수(Functions) 패널에서
+ 함수(+ Function)
버튼을 클릭하여 새 함수를 추가합니다. - 함수 이름을 지정합니다. (예:
CalculateDistanceBetweenActors
) - 디테일 패널에서 필요한 입력(Inputs) 및 출력(Outputs) 핀을 추가합니다.
- 예시:
ActorA
(Actor Reference),ActorB
(Actor Reference) 입력 핀,Distance
(Float) 출력 핀
- 예시:
- 함수 로직 구현
ActorA
와ActorB
의 위치를 가져와Vector Length
노드로 거리를 계산하고, 이 값을Return Node
의Distance
출력 핀에 연결합니다.- 함수 라이브러리 함수는 기본적으로 정적(Static) 으로 설정됩니다. 이 때문에 함수 노드에
Target
핀이 없습니다.
- 생성된
-
컴파일 및 저장: 함수를 정의한 후에는 블루프린트를 컴파일하고 저장해야 합니다.
함수 라이브러리 활용 예시
이제 정의한 CalculateDistanceBetweenActors
함수를 다른 블루프린트에서 사용해 봅시다.
-
함수 호출할 블루프린트 열기: (예:
BP_PlayerCharacter
또는BP_GameManager
) -
함수 라이브러리 함수 호출
- 이벤트 그래프의 빈 공간에서 마우스 오른쪽 버튼을 클릭합니다.
- 여러분이 정의한 함수 이름(예:
CalculateDistanceBetweenActors
)을 검색합니다. 함수 라이브러리 함수의 경우, 검색 시 해당 함수가 속한 라이브러리 이름과 함께 표시됩니다. (예:Calculate Distance Between Actors (BFL_GameUtilities)
) - 해당 함수 노드를 선택하여 그래프에 배치합니다.
ActorA
와ActorB
입력 핀에 적절한 액터 레퍼런스(예:Get Player Character
,Get Actor Of Class
등으로 가져온 특정 적 액터)를 연결합니다.Distance
출력 핀을Print String
노드에 연결하여 계산된 거리를 화면에 출력합니다.
-
컴파일 및 실행: 블루프린트를 컴파일하고 게임을 실행하여 결과가 올바르게 나오는지 확인합니다.
함수 라이브러리의 고급 활용 및 고려사항
-
순수 함수(Pure Function) 생성
- 함수 라이브러리의 함수는 기본적으로 순수 함수로 설정될 수 있습니다. 순수 함수는 입력 핀을 기반으로 출력 값을 계산하며, 내부적으로 상태를 변경하거나 실행 핀을 가지지 않습니다. 노드에 아이콘이 붙어 있습니다.
- 디테일 패널에서
Pure
옵션을 체크/해제하여 설정할 수 있습니다. - 순수 함수는 여러 번 호출되어도 항상 같은 입력에 대해 같은 출력을 반환하므로, 깔끔한 계산 로직에 적합합니다.
-
데이터 테이블 또는 저장 게임 오브젝트와 연동
- 함수 라이브러리에 데이터 테이블에서 데이터를 가져오는 함수나, 저장 게임 오브젝트를 로드/저장하는 유틸리티 함수 등을 만들어 두면, 여러 곳에서 동일한 로직을 쉽게 재사용할 수 있습니다.
- 예시:
Get Item Data (By Row Name)
함수를BFL_GameUtilities
에 정의하여, 아이템 데이터 테이블에서 쉽게 데이터를 가져오는 로직을 캡슐화할 수 있습니다.
-
변수 사용 불가: 함수 라이브러리 블루프린트 자체에는 변수를 추가할 수 없습니다. 이는 함수 라이브러리가 특정 인스턴스에 종속되지 않는 정적 함수들의 모음이기 때문입니다. 데이터를 다루려면 함수의 입력/출력 핀을 사용하거나,
Game Instance
와 같은 전역적인 데이터 저장소에 접근해야 합니다. -
상속 불가: 함수 라이브러리는 다른 블루프린트로부터 상속받을 수 없으며, 다른 블루프린트가 함수 라이브러리를 상속받을 수도 없습니다. 순수하게 유틸리티 함수 모음으로서의 역할에 집중합니다.
함수 라이브러리는 블루프린트 프로젝트의 구조를 깔끔하게 유지하고, 반복적인 작업을 줄이며, 팀원 간의 협업 효율성을 높이는 데 매우 중요한 도구입니다. 자주 사용되는 공통 기능을 함수 라이브러리에 모아두는 습관을 들이면, 장기적으로 훨씬 관리하기 쉬운 블루프린트 시스템을 구축할 수 있습니다.
이번 절에서는 블루프린트 함수 라이브러리의 개념, 생성 및 활용 방법, 그리고 그 장점에 대해 자세히 알아보았습니다. 함수 라이브러리는 유틸리티성 기능을 중앙 집중적으로 관리하는 데 최적의 솔루션입니다.
이로써 5장 '기본 데이터 관리 기법'의 모든 내용을 마쳤습니다.