icon
2장 : 블루프린트 기본 요소

함수 정의 및 기본 호출 방법


변수가 데이터를 저장하는 '상자'라면, 함수(Function) 는 특정 작업을 수행하는 '미리 만들어진 작업 절차'라고 할 수 있습니다. 게임 개발에서는 특정 동작이나 계산이 여러 곳에서 반복적으로 필요할 때가 많습니다. 예를 들어, 플레이어가 아이템을 획득할 때마다 점수를 추가하고, 효과음을 재생하며, 인벤토리에 아이템을 추가하는 일련의 과정이 있다고 가정해봅시다. 이 과정을 매번 새로 만들 필요 없이, 하나의 함수로 정의해두면 필요할 때마다 간단히 호출하여 재사용할 수 있습니다.

함수를 사용하는 것은 코드의 재사용성을 높이고, 블루프린트 그래프를 더욱 깔끔하고 관리하기 쉽게 만들어줍니다. 마치 복잡한 레시피의 한 부분을 '소스 만들기'라는 별도의 과정으로 분리하여 필요한 순간에 가져다 쓰는 것과 같습니다.


함수란 무엇인가?

함수는 특정 작업을 수행하기 위한 노드들의 묶음입니다. 함수는 입력(Inputs) 을 받아 어떤 작업을 처리한 후 출력(Outputs) 을 반환할 수 있습니다. 입력은 함수가 작업을 수행하는 데 필요한 정보이고, 출력은 함수가 작업을 마친 후 내놓는 결과물입니다.

블루프린트 함수는 주로 다음과 같은 경우에 사용됩니다.

  • 반복적인 로직: 여러 곳에서 동일한 또는 유사한 로직이 반복될 때 함수로 묶어 재사용합니다.
  • 복잡한 로직의 단순화: 복잡한 하나의 로직을 여러 개의 작은 함수로 분리하여 가독성을 높이고 관리하기 쉽게 만듭니다.
  • 특정 기능의 캡슐화: 특정 기능(예: 대미지 계산, 아이템 사용)을 함수로 정의하여, 해당 기능을 호출하는 쪽에서는 내부 구현을 몰라도 되도록 만듭니다.

함수 정의 및 생성하기

블루프린트에서 함수를 정의하는 과정은 다음과 같습니다.

함수 생성하기

  • 블루프린트 에디터의 좌측에 있는 변수 패널 아래의 함수(Functions) 패널로 이동합니다.
  • 패널 상단의 + 함수(+ Function) 버튼을 클릭합니다.
  • 새로운 함수가 생성되면 이름을 입력합니다. (예: AddScore)
  • 함수 이름 옆에 새로운 탭이 열리면서 해당 함수의 이벤트 그래프와 유사한 공간이 나타납니다. 이곳이 바로 함수를 정의하는 공간입니다.

입력 및 출력 핀 추가하기

  • 함수 정의 그래프에서 입력(Inputs) 노드와 출력(Outputs) 노드를 찾습니다. 이 노드들은 함수의 시작점과 끝점을 나타냅니다.
  • 디테일 패널에서 이 함수에 필요한 입력(매개변수)과 출력(반환 값)을 추가할 수 있습니다.
  • 입력(Inputs) 노드를 선택한 상태에서 디테일 패널의 입력(Inputs) 섹션에 있는 + 버튼을 클릭합니다.
  • 새로운 입력 매개변수의 이름을 지정하고(예: ScoreToAdd) 원하는 변수 유형을 선택합니다(예: Integer).
  • 마찬가지로 출력(Outputs) 노드를 선택하여 반환할 값을 추가할 수 있습니다.

함수 로직 구현하기

  • 함수 정의 그래프에서 입력 핀을 통해 전달받은 데이터를 사용하여 로직을 구성합니다.
  • 예를 들어, AddScore 함수라면, ScoreToAdd 입력 값을 기존 PlayerScore 변수에 더하고, 그 결과를 다시 PlayerScore에 설정하는 로직을 만들 수 있습니다.
    • 입력 노드의 ScoreToAdd 출력 핀을 가져옵니다.
    • Get PlayerScore 노드를 추가합니다.
    • 두 값을 더하기 위해 Integer + Integer 노드를 추가하고 연결합니다.
    • 결과를 Set PlayerScore 노드에 연결합니다.
    • 마지막으로 Set PlayerScore의 실행 핀을 출력 노드의 실행 핀에 연결합니다.

컴파일 및 저장: 함수를 정의한 후에는 반드시 컴파일하고 저장해야 변경 사항이 적용됩니다.


함수 호출(Call) 방법

정의된 함수는 다른 블루프린트 그래프(예: 이벤트 그래프)에서 호출하여 실행할 수 있습니다.

이벤트 그래프로 돌아가기: 블루프린트 에디터에서 이벤트 그래프 탭을 클릭하여 메인 그래프로 돌아옵니다.

함수 노드 추가

  • 이벤트 그래프의 빈 공간에서 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴를 엽니다.
  • 검색창에 여러분이 정의한 함수 이름(예: AddScore)을 입력하고 해당 함수를 선택합니다.
  • 또는, 좌측 함수(Functions) 패널에서 해당 함수를 찾아 그래프로 드래그 앤 드롭해도 됩니다.

함수 연결

  • 함수 노드는 일반적인 노드와 마찬가지로 실행 핀과 데이터 핀을 가집니다.
  • 이전 노드의 실행 핀을 함수 노드의 실행 핀에 연결하여 함수가 언제 실행될지 지정합니다.
  • 함수의 입력 핀에 필요한 데이터를 연결합니다. 예를 들어, AddScore 함수의 ScoreToAdd 핀에 50이라는 값을 연결할 수 있습니다.
  • 함수가 반환하는 출력 값을 다음 로직에 사용하려면, 함수 노드의 출력 핀을 다음 노드의 입력 핀에 연결합니다.

예시: AddScore 함수 호출

이전 절에서 만든 BP_WelcomeMessage 블루프린트에서 AddScore 함수를 호출해봅시다.

BP_WelcomeMessage 블루프린트를 열고, PlayerScore 변수(Integer 타입)를 생성합니다.

좌측 함수 패널에서 + 함수 를 클릭하여 AddScore라는 새 함수를 만듭니다.

AddScore 함수 그래프에서 입력(Inputs) 노드를 선택하고, 디테일 패널에서 ScoreToAdd (Integer 타입)이라는 입력 매개변수를 추가합니다.

함수 로직은 다음과 같이 구성합니다.

  • Get PlayerScore 노드를 가져옵니다.
  • ScoreToAdd 입력 핀에서 드래그하여 Integer + Integer 노드를 추가하고, Get PlayerScoreScoreToAdd를 연결합니다.
  • Set PlayerScore 노드를 추가하고, Integer + Integer의 결과를 Set PlayerScore에 연결합니다.
  • 입력(Inputs) 노드의 실행 핀을 Set PlayerScore의 실행 핀에 연결하고, Set PlayerScore의 실행 핀을 출력(Outputs) 노드의 실행 핀에 연결합니다.

함수를 컴파일하고 저장합니다.

이벤트 그래프로 돌아와서 Event BeginPlay 노드 뒤에 AddScore 함수를 호출하는 노드를 배치합니다.

AddScore 노드의 ScoreToAdd 입력 핀에 100을 입력합니다.

AddScore 노드 뒤에 Print String 노드를 연결하고, Get PlayerScore 노드를 가져와 Print StringIn String 핀에 연결합니다.

블루프린트를 컴파일하고 저장한 후 게임을 실행하면, "100"이라는 점수가 출력되는 것을 확인할 수 있을 것입니다.

이처럼 함수를 사용하면 복잡한 작업을 하나의 블록으로 묶어 재사용하고, 블루프린트의 가독성과 유지보수성을 크게 향상시킬 수 있습니다.


이번 절에서는 블루프린트 함수를 정의하고 호출하는 기본적인 방법을 알아보았습니다. 함수는 블루프린트 로직을 체계적으로 관리하는 데 있어 핵심적인 도구입니다. 다음 절에서는 함수와 유사하지만 다른 특성을 가진 '이벤트'에 대해 좀 더 깊이 있게 다루겠습니다.