함수 정의 및 기본 호출 방법
변수가 데이터를 저장하는 '상자'라면, 함수(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 PlayerScore
와ScoreToAdd
를 연결합니다.Set PlayerScore
노드를 추가하고,Integer + Integer
의 결과를Set PlayerScore
에 연결합니다.입력(Inputs)
노드의 실행 핀을Set PlayerScore
의 실행 핀에 연결하고,Set PlayerScore
의 실행 핀을출력(Outputs)
노드의 실행 핀에 연결합니다.
함수를 컴파일하고 저장합니다.
이벤트 그래프
로 돌아와서 Event BeginPlay
노드 뒤에 AddScore
함수를 호출하는 노드를 배치합니다.
AddScore
노드의 ScoreToAdd
입력 핀에 100
을 입력합니다.
AddScore
노드 뒤에 Print String
노드를 연결하고, Get PlayerScore
노드를 가져와 Print String
의 In String
핀에 연결합니다.
블루프린트를 컴파일하고 저장한 후 게임을 실행하면, "100"이라는 점수가 출력되는 것을 확인할 수 있을 것입니다.
이처럼 함수를 사용하면 복잡한 작업을 하나의 블록으로 묶어 재사용하고, 블루프린트의 가독성과 유지보수성을 크게 향상시킬 수 있습니다.
이번 절에서는 블루프린트 함수를 정의하고 호출하는 기본적인 방법을 알아보았습니다. 함수는 블루프린트 로직을 체계적으로 관리하는 데 있어 핵심적인 도구입니다. 다음 절에서는 함수와 유사하지만 다른 특성을 가진 '이벤트'에 대해 좀 더 깊이 있게 다루겠습니다.