icon
5장 : 기본 데이터 관리 기법

함수 라이브러리 생성 및 활용


지금까지 우리는 블루프린트에서 변수, 함수, 매크로를 이용해 코드를 재사용하고, 데이터 테이블, 저장 게임 오브젝트, 에셋 레퍼런싱 등을 통해 데이터를 효율적으로 관리하는 방법을 배웠습니다. 이번 절에서는 이 모든 것을 아울러, 여러 블루프린트에서 공통적으로 사용되는 유틸리티성 함수들을 한곳에 모아 관리할 수 있는 강력한 기능인 블루프린트 함수 라이브러리(Blueprint Function Library) 에 대해 알아보겠습니다.


함수 라이브러리란 무엇인가?

블루프린트 함수 라이브러리는 특정 액터나 오브젝트에 종속되지 않고, 어디서든 호출할 수 있는 정적(Static) 함수들의 모음입니다. 즉, 특정 인스턴스(객체) 없이도 바로 호출하여 사용할 수 있는 기능들을 담는 블루프린트 클래스입니다.

일반적인 블루프린트의 함수는 해당 블루프린트의 인스턴스가 존재해야만 호출할 수 있습니다. 예를 들어, BP_PlayerCharacterJump 함수를 호출하려면 BP_PlayerCharacter의 인스턴스가 있어야 합니다. 하지만 함수 라이브러리의 함수는 마치 Print String 노드처럼, 어떤 블루프린트에서든 바로 검색하여 사용할 수 있습니다.

함수 라이브러리가 필요한 이유

  • 높은 재사용성: 게임 전반에 걸쳐 자주 사용되는 범용적인 유틸리티 기능을 한곳에 모아두면, 필요한 곳에서 쉽게 가져다 쓸 수 있습니다.
  • 느슨한 결합: 특정 액터에 종속되지 않으므로, 다른 블루프린트와의 의존성을 줄여줍니다.
  • 유지보수 용이성: 공통 기능이 수정될 경우, 함수 라이브러리에서 한 번만 수정하면 모든 호출 위치에 반영됩니다.
  • 코드 깔끔함: 반복되는 로직을 함수 라이브러리로 분리하여 블루프린트 그래프를 간결하고 읽기 쉽게 만듭니다.
  • 성능 최적화: 정적 함수는 특정 인스턴스에 대한 참조를 유지할 필요가 없으므로 미미하게나마 성능 이점을 가질 수 있습니다.

함수 라이브러리 생성 및 함수 정의

  1. 함수 라이브러리 블루프린트 생성

    • 콘텐츠 브라우저에서 마우스 오른쪽 버튼을 클릭합니다.
    • 블루프린트 클래스(Blueprint Class)를 선택합니다.
    • 모든 클래스(All Classes)를 펼친 후 Blueprint Function Library를 검색하여 선택합니다.
    • 이름을 지정합니다. (예: BFL_GameUtilities - 일반적으로 'BFL_' 접두사를 사용합니다.)
  2. 함수 라이브러리에 함수 정의

    • 생성된 BFL_GameUtilities 블루프린트 에디터를 엽니다.
    • 일반 블루프린트와 유사하게 좌측 함수(Functions) 패널에서 + 함수(+ Function) 버튼을 클릭하여 새 함수를 추가합니다.
    • 함수 이름을 지정합니다. (예: CalculateDistanceBetweenActors)
    • 디테일 패널에서 필요한 입력(Inputs)출력(Outputs) 핀을 추가합니다.
      • 예시: ActorA (Actor Reference), ActorB (Actor Reference) 입력 핀, Distance (Float) 출력 핀
    • 함수 로직 구현
      • ActorAActorB의 위치를 가져와 Vector Length 노드로 거리를 계산하고, 이 값을 Return NodeDistance 출력 핀에 연결합니다.
      • 함수 라이브러리 함수는 기본적으로 정적(Static) 으로 설정됩니다. 이 때문에 함수 노드에 Target 핀이 없습니다.
  3. 컴파일 및 저장: 함수를 정의한 후에는 블루프린트를 컴파일하고 저장해야 합니다.


함수 라이브러리 활용 예시

이제 정의한 CalculateDistanceBetweenActors 함수를 다른 블루프린트에서 사용해 봅시다.

  1. 함수 호출할 블루프린트 열기: (예: BP_PlayerCharacter 또는 BP_GameManager)

  2. 함수 라이브러리 함수 호출

    • 이벤트 그래프의 빈 공간에서 마우스 오른쪽 버튼을 클릭합니다.
    • 여러분이 정의한 함수 이름(예: CalculateDistanceBetweenActors)을 검색합니다. 함수 라이브러리 함수의 경우, 검색 시 해당 함수가 속한 라이브러리 이름과 함께 표시됩니다. (예: Calculate Distance Between Actors (BFL_GameUtilities))
    • 해당 함수 노드를 선택하여 그래프에 배치합니다.
    • ActorAActorB 입력 핀에 적절한 액터 레퍼런스(예: Get Player Character, Get Actor Of Class 등으로 가져온 특정 적 액터)를 연결합니다.
    • Distance 출력 핀을 Print String 노드에 연결하여 계산된 거리를 화면에 출력합니다.
  3. 컴파일 및 실행: 블루프린트를 컴파일하고 게임을 실행하여 결과가 올바르게 나오는지 확인합니다.


함수 라이브러리의 고급 활용 및 고려사항

  • 순수 함수(Pure Function) 생성

    • 함수 라이브러리의 함수는 기본적으로 순수 함수로 설정될 수 있습니다. 순수 함수는 입력 핀을 기반으로 출력 값을 계산하며, 내부적으로 상태를 변경하거나 실행 핀을 가지지 않습니다. 노드에 아이콘이 붙어 있습니다.
    • 디테일 패널에서 Pure 옵션을 체크/해제하여 설정할 수 있습니다.
    • 순수 함수는 여러 번 호출되어도 항상 같은 입력에 대해 같은 출력을 반환하므로, 깔끔한 계산 로직에 적합합니다.
  • 데이터 테이블 또는 저장 게임 오브젝트와 연동

    • 함수 라이브러리에 데이터 테이블에서 데이터를 가져오는 함수나, 저장 게임 오브젝트를 로드/저장하는 유틸리티 함수 등을 만들어 두면, 여러 곳에서 동일한 로직을 쉽게 재사용할 수 있습니다.
    • 예시: Get Item Data (By Row Name) 함수를 BFL_GameUtilities에 정의하여, 아이템 데이터 테이블에서 쉽게 데이터를 가져오는 로직을 캡슐화할 수 있습니다.
  • 변수 사용 불가: 함수 라이브러리 블루프린트 자체에는 변수를 추가할 수 없습니다. 이는 함수 라이브러리가 특정 인스턴스에 종속되지 않는 정적 함수들의 모음이기 때문입니다. 데이터를 다루려면 함수의 입력/출력 핀을 사용하거나, Game Instance와 같은 전역적인 데이터 저장소에 접근해야 합니다.

  • 상속 불가: 함수 라이브러리는 다른 블루프린트로부터 상속받을 수 없으며, 다른 블루프린트가 함수 라이브러리를 상속받을 수도 없습니다. 순수하게 유틸리티 함수 모음으로서의 역할에 집중합니다.

함수 라이브러리는 블루프린트 프로젝트의 구조를 깔끔하게 유지하고, 반복적인 작업을 줄이며, 팀원 간의 협업 효율성을 높이는 데 매우 중요한 도구입니다. 자주 사용되는 공통 기능을 함수 라이브러리에 모아두는 습관을 들이면, 장기적으로 훨씬 관리하기 쉬운 블루프린트 시스템을 구축할 수 있습니다.


이번 절에서는 블루프린트 함수 라이브러리의 개념, 생성 및 활용 방법, 그리고 그 장점에 대해 자세히 알아보았습니다. 함수 라이브러리는 유틸리티성 기능을 중앙 집중적으로 관리하는 데 최적의 솔루션입니다.

이로써 5장 '기본 데이터 관리 기법'의 모든 내용을 마쳤습니다.