함수

다른 그래프에서 실행, 호출할 수 있는 노드 그래프입니다.

Windows
MacOS
Linux

Function (함수)는 Blueprint 내 다른 그래프에서 실행 또는 호출 가능한 특정 Blueprint 에 속하는 노드 그래프입니다. 함수에는 하나의 입력부가 있는데, 실행 출력 핀이 하나 있는 함수 이름으로 된 노드로 표시됩니다. 이 함수가 다른 그래프에서 호출되면, 그 출력 실행 핀을 활성화시켜 연결된 네트워크가 실행되도록 합니다.

레퍼런스 및 사용법 정보는 델리게이트 문서를 참고하세요.

접근 지정자

함수를 만들 때, 다른 오브젝트가 해당 함수에 접근할 수 있을지 없을지 지정할 수가 있습니다. 함수를 선택하고 디테일 패널에서 설정할 수 있는 Access Specifier (접근 지정자) 프로퍼티를 통해 가능합니다.

AccessSpecifier.png

이 프로퍼티에는 다음과 같은 세팅이 들어있습니다:

세팅

설명

Public

다른 모든 오브젝트가 이 함수를 호출할 수 있습니다. 기본 세팅입니다.

Protected

이 함수는 현재 블루프린트와 여기서 파생된 블루프린트에서만 호출 가능합니다.

Private

이 함수는 현재 블루프린트에서만 호출 가능합니다.

Pure vs. Impure

함수는 Pure (순수하)거나 Impure (비순수) 중 하나입니다. 주요 차이점이라면 순수 함수는 어떤 식으로든 클래스의 멤버나 상태를 변경하지 않기로 약속한 반면, 비순수 함수는 자유롭게 상태를 변경할 수 있습니다. 순수 함수는 일반적으로 값을 구해오거나 데이터 값을 출력하기만 하는 작업에 사용됩니다.

비순수 함수는 EventGraph 에서 실행 핀을 Function Call 노드 에 연결하여 명시적으로 실행해야 합니다. 비순수 함수는 다음 방법 중 하나를 사용하도록 디자인되었습니다:

  • 코드에 정의된 UFUNCTION 에 대한 UFUNCTION 선언에서 BlueprintCallable 키워드를 지정합니다.

  • 블루프린트 에디터 를 통해 추가된 함수의 경우 Pure 박스의 체크를 해제시켜 둡니다.

순수 함수는 데이터 핀으로 연결되며, 그에 관련된 데이터가 필요할 때 컴파일러가 자동으로 실행해 줍니다. 즉 순수 함수는 연결된 노드마다 한 번씩 호출된다 는 뜻입니다. 순수 함수는 다음 방법 중 하나를 사용하도록 디자인되었습니다:

  • 코드에 정의된 함수들에 대한 함수 선언에서 BlueprintPure 키워드를 지정합니다.

  • 블루프린트 에디터 를 통해 추가된 함수의 경우 Pure 박스를 체크합니다.

함수 만들기

블루프린트 안에서

블루프린트 클래스 또는 레벨 블루프린트 안에서 함수를 만들려면:

  1. 내 블루프린트 탭에서 myblueprint_function.png 함수 목록 제목줄의 plus_Button.png 추가 버튼 을 클릭하여 새 함수를 만들 수 있습니다.

  2. 새 함수의 이름을 지어줍니다.

    name_function_blueprint.png

새 함수가 블루프린트 에디터의 그래프 에디터 탭에 있는 새 탭에 열립니다.

내 블루프린트 탭에서 우클릭한 다음 함수 를 선택하여 만들 수도 있습니다.

add_function_rtclick.png

블루프린트 인터페이스에서

블루프린트 인터페이스 에서 생성된 함수블루프린트 클래스레벨 블루프린트 에서 함수 를 생성할 때와 같은 방법으로 생성되나, 구현이 매우 다릅니다.

블루프린트 인터페이스 안에서 함수를 만들려면:

  1. 내 블루프린트 탭에서 myblueprint_function.png 함수 목록 제목줄의 plus_Button.png 추가 버튼 을 클릭하여 새 함수를 만들 수 있습니다.

  2. 새 함수의 이름을 지어줍니다.

    name_function_interface.png

새 함수가 블루프린트 에디터의 그래프 에디터 탭 내 새 탭에 열립니다.

내 블루프린트 탭에 우클릭한 다음 함수 를 선택하여 함수를 만들 수도 있습니다.

interface_function_rtclick.png

레퍼런스 및 사용법 정보는 게임플레이 타이머 문서를 참고하세요.

함수 편집하기

함수가 생성되고 나면 그 함수성을 정의해 줄 필요가 있습니다. 그 과정은 두 단계로 이루어집니다:

  • 필요한 입력과 출력 파라미터 생성.

  • 입력과 출력 사이에 노드 네트워크를 만들어 함수 행위 정의.

디테일 탭에서는 설명, 카테고리, 접근 지정자, 함수가 Pure 인지 아닌지를 설정할 수 있습니다.

함수의 디테일 탭을 여는 방법은:

  • 내 블루프린트 탭에서 함수를 선택하거나,

  • 함수가 호출되고 있는 그래프에서 함수 노드를 선택하거나,

  • 함수의 그래프에서 함수 입구 (또는 출구) 노드를 선택하면 됩니다.

selected_function_myblueprint.png

입력과 출력 파라미터

함수의 디테일 탭에서는 입출력 파라미터도 설정할 수 있습니다.

입출력 파라미터를 추가하려면:

  1. 디테일 탭의 입력 또는 출력 섹션 중 하나에서 버튼을 클릭합니다.

  2. 새 파라미터의 이름을 짓고 드롭다운 메뉴를 사용해서 유형을 설정합니다. 이 예제에서는 두 개의 벡터 데이터 입력 VectorAVectorB, 그리고 플로트 데이터 출력 Distance 가 있습니다.

    function_details.png

    블루프린트 매크로 라이브러리 와는 달리, 함수에는 데이터 입력과 출력만 추가할 수 있습니다.

    함수 그래프의 입구와 출구 노드가 올바른 핀으로 자동 업데이트됩니다. 다른 펑션 콜 노드와 마찬가지입니다.

    function_tunnel_with_pins.png

    function_call_with_pins.png

  3. 파라미터에 대한 항목을 펼쳐 기본값을 설정할 수도 있고, 값을 참조 전달할 것인지도 선택할 수 있습니다.

    function_details_expanded.png

노드 양단에서 이 파라미터에 대한 핀의 위치를 변경하려면, 펼친 디테일 탭 항목에서 위아래 화살표를 사용하면 됩니다.

이제 함수에 함수성을 정의할 준비가 다 됐습니다. 입구와 출구 노드 사이에 노드 망을 만들어 주면 됩니다.

함수성 정의하기

함수의 정의는 입력과 출력 노드 사이를 잇는 블루프린트 그래프를 만드는 것으로 가능합니다. 이번 예제에서는 3D 공간의 두 점 사이 거리를 반환하는 (아래 그림의) 3D 버전 피타고라스의 정리를 적용하는 데 필요한 네트워크를 만들어 보겠습니다.

dx = (x2-x1)^2
dy = (y2-y1)^2
dz = (z2-z1)^2

D = sqrt(dx+dy+dz)

블루프린트의 노드 망으로 변환했습니다...

이미지를 클릭하면 원래 크기로 보입니다.

함수 호출하기

함수를 생성 및 정의하고난 후, 이벤트 그래프에서 호출할 차례입니다. 함수를 호출하는 노드를 만들려면:

  • 내 블루프린트 탭에서 함수를 끌어 이벤트 그래프 내 빈 곳에 놓습니다.

  • 이벤트 그래프에 우클릭하거나 적합한 실행 / 데이터 핀에 끌어 놓아 컨텍스트 메뉴를 엽니다. 컨텍스트 메뉴에서 우리 함수를 검색한 다음 선택하여 Function Call 노드를 추가합니다.

아래 망은 벡터 변수 둘을 받은 다음, 매 틱마다 그 사이의 거리를 계산하여 화면에 출력합니다.

EventGraph.png

이 예제에서는 퍼블릭 벡터 변수를 두 개 만들었습니다. 각각에 대한 세팅에서 Show 3D Widget (3D 위젯 표시)를 True 로 설정했습니다. 이제 블루프린트 를 레벨에 추가하고 나면 Point A 와 Point B 로 정의된 위치에 3D 위젯이 나타날 것입니다. 3D 위젯으로 Point APoint B 를 뷰포트에서 움직여 그 값을 쉽게 바꿀 수 있습니다.

Points1And2Viewport.png

이제 맵을 테스트해 보면, 두 점 사이의 거리가 매 틱마다 출력되어, 함수가 정상 작동중임을 알 수 있습니다.

WithBPEditorClosed.png

외부 블루프린트에서 함수 호출하기

한 블루프린트 안에서 다른 블루프린트의 함수 를 호출할 수도 있는데, 호출하고자 하는 함수가 들어있는 블루프린트로의 레퍼런스가 있어야 합니다.

아래의 경우를 예로 들면, (MyCharacter 라는) 캐릭터 블루프린트에 Take Damage 라는 함수가 있어, 호출할 때마다 PlayerHealth 라는 변수를 10 씩 깎습니다.

PlayerHealthFunction.png

MyCharacter 블루프린트에서 플레이어가 무기를 발사하면 스폰되는 프로젝타일인 다른 블루프린트에, 프로젝타일이 무언가에 맞으면 어떤 일이 벌어지는지에 대한 스크립트가 있습니다.

DefaultProjectile.png

블루프린트 일인칭 템플릿 프로젝트 에 포함된 기본 MyProjectile 블루프린트 스크립트는 이미 무언가에 맞으면 물리 시뮬레이션을 하고 맞은 위치에 충격을 가하는 등 무언가를 하고 있습니다. 맞은 것이 플레이어인지 검사해서 그렇다면, Take Damage 함수를 호출하고 싶다 칩시다.

Event HitOther 핀을 끌어 놓은 다음 MyCharacter 블루프린트로 Cast To 하면 그렇게 할 수 있습니다.

CastToMyCharacter.png

그렇게 하고 나면, 플레이어 캐릭터로의 레퍼런스가 생기므로 As My Character 핀을 끌어 놓은 다음 그 블루프린트에 있는 Take Damage 함수를 호출할 수 있습니다.

CallFunction.png

플레이어에 맞은 이후 프로젝타일을 소멸시키는 나머지 스크립트는 다음과 같이 연결해 주면 됩니다:

FullProjectileScript.png

그리고 에디터에서 플레이해 보면, 아래와 같은 것을 볼 수 있습니다.

PlayerHealth 변수를 PrintString 노드에 연결하여 현재 값을 표시할 수 있도록 했습니다. 기본적으로 100 으로 설정되어 있으며, 플레이어가 벽에 쏜 것이 튕겨 플레이어에 맞을 때마다 Take Damage 함수가 호출되어 PlayerHealth 변수가 10 씩 감소되는 것을 볼 수 있습니다.

함수 문제해결

펑션 콜 노드 위에 "[함수명]으로 된 함수를 찾을 수 없습니다" 라는 메시지와 함께 경고! 바가 표시되면, 블루프린트컴파일 하세요.

function_warning.png

함수의 입력 및 출력 파라미터 수를 바꾸는 경우에도 블루프린트컴파일 해 줘야 합니다.

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback