1. UFunction 선언
언리얼 엔진에서 함수는 두가지 기본 형태가 존재합니다. 바로 일반 C++ 함수 또는 UFunction입니다.
일반 C++ 함수 및 UFunction 둘다 클래스 헤더 파일에 선언됩니다. 일반 C++ 함수를 선언할때는 표준 C++ 문법을 사용합니다. 그에 반해, UFunction은 특수 문법을 사용하여 선언하며, 함수 지정자를 통해 선언에 함수 관련 추가 정보를 설정할 수 있습니다.
UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)])
ReturnType FunctionName([Parameter, Parameter, ...])
UFunction은 C++ 구현이 있고, C++ 코드 안에서 호출할 수 있으며, 함수 본문 내에서 다른 C++ 함수 또는 UFunction에 대한 호출을 포함할 수 있다는 점에서 C++ 함수와 동일하게 작동합니다.
그러나 몇가지 다른 부분이 있습니다.
예를 들어 UFunction은 블루프린트 비주얼 스크립팅 시스템 안에서 호출 또는 오버라이드가 가능합니다.
BlueprintCallable, BlueprintImplementableEvent, 또는 BlueprintPure 지정자로 선언된 UFunction은 블루프린트에 노출됩니다.
클래스의 디폴트 프로퍼티 내 델리게이트로 할당할 수도 있습니다. Input 클래스에서 함수에 입력 동작 또는 축을 바인딩할때 흔히 사용되는 기법입니다.
그리고 리플리케이션 콜백으로도 사용됩니다. 즉, 연결된 변수가 변경되어 네트워크에 리플리케이트될때 UFunction이 호출된다는 뜻입니다.
마지막으로, 실행 함수로 선언해서 플레이어가 플레이 도중 게임내 콘솔에서 호출하도록 할 수 있는 유일한 함수 유형이기도 합니다.
2. 함수 지정자
함수 지정자 | 효과 |
BlueprintCallable | 이 함수는 블루프린트 또는 레벨 블루프린트 그래프에서 실행할 수 있습니다. |
BlueprintImplementableEvent | 이 함수는 블루프린트 또는 레벨 블루프린트 그래프에서 구현할 수 있습니다. |
BlueprintPure | 이 함수는 어떤 식으로든 소유 오브젝트에 영향을 주지 않으며, 블루프린트 또는 레벨 블루프린트 그래프에서 실행할 수 있습니다. |
Client | 이 함수는 호출되는 오브젝트를 소유한 클라이언트에서만 실행됩니다. 메인 함수 이름 뒤에 _Implementation 를 붙인 함수를 추가로 선언합니다. 자동 생성 코드는 필요할 때 "_Implementation" 메소드를 호출합니다. |
Server | 이 함수는 서버에서만 실행됩니다. 메인 함수 이름 뒤에 _Implementation 를 붙인 함수를 추가로 선언하고, 기거서 코드를 작성합니다. 자동생성 코드는 필요할 때 "_Implementation" 메서드를 호출합니다. |
UFunction 선언시, 위 표의 함수 지정자들을 선언에 붙여 함수가 엔진과 에디터의 다양한 부분에서 어떤식으로 동작할지를 제어할 수 있습니다.
3. 메타데이터 지정자
함수 메타 태그 | 효과 |
ArrayTypeDependentParams="Parameter" | ArrayParm 사용 시, ArrayParm 목록 내 모든 파라미터 유형을 결정하는 파라미터를 지정합니다. |
BlueprintProtected | 이 함수는 블루프린트의 소유 오브젝트에서만 호출 가능합니다. 다른 인스턴스에서는 호출할 수 없습니다. |
DevelopmentOnly | 이 함수는 개발 모드에서만 실행됩니다. 출시 제품에 포함시키지 않을 것으로 기대되는 디버그 출력같은 기능에 좋습니다. |
KeyWords="Set Of Keywords" | 블루프린트 그래프에서 함수 호출을 위한 노드를 배치할 때처럼, 이 함수 검색 시 사용할 수 있는 키워드 세트를 지정합니다. |
DeprecatedFunction | 이 함수를 참조하는 블루프린트는 컴파일 경고를 통해 사용자에게 함수가 폐기되었음을 알립니다. DeprecationMessage 메타데이터 지정자를 사용하면 (폐기된 함수 대체 안내문 제공과 같은) 폐기 경고 메시지를 추가할 수 있습니다. |
UFunction 선언시 함수의 메타 태그 또한 설정할 수 있습니다. 위 표의 메타데이터 지정자들을 사용하여 함수에 여러가지 효과를 줄 수 있습니다.
4. 함수 파라미터 지정자
Out | 파라미터를 참조 전달로 선언하여 함수가 수정할 수 있도록 합니다. |
Optional | 특정 함수 파라미터를 호출자 편의를 위한 선택사항으로 만듭니다. 이 옵셔널 파라미터 값은 호출자가 함수에 의존할 값으로 지정하지 않는 값입니다. 예를 들어 SpawnActor 함수가 위치와 회전을 옵셔널로 받는다면, 기본 위치와 회전은 스폰하는 액터의 루트 컴포넌트 값이 됩니다. 옵셔널 인수의 기본값은 = [value] 로 지정할 수 있습니다. 예: function myFunc(optional int x = -1). 대부분의 경우 옵셔널 파라미터에 전달된 값이 없으면 해당 변수 유형의 기본값, 또는 제로(예: 0, false, "", none)가 사용됩니다. |
위에서 설명한 것처럼 UFunction 함수 유형은 여러가지 지정자들을 통해서 함수에 손쉽게 다양한 효과들을 줄 수 있습니다. 그렇기 때문에 자주 사용되는 지정자들을 알아두는 것이 개발의 생산성을 높이는데 도움을 줄 수 있습니다.
더 많은 UFunction의 함수 및 메타데이터 지정자에 대해 알고싶다면 함수 지정자 | 언리얼 엔진 문서 (unrealengine.com) 글을 참고하시기 바랍니다.
'언리얼 C++ 프로그래밍' 카테고리의 다른 글
[언리얼 C++] 인터페이스 클래스 (0) | 2021.07.28 |
---|---|
[언리얼 C++] 게임플레이 모듈 (0) | 2021.07.27 |
[언리얼 C++] 게임플레이 클래스 구현 (0) | 2021.07.25 |
[언리얼 C++] 게임플레이 클래스 생성 (0) | 2021.07.24 |
[언리얼 C++] 위크 포인터 사용법 (0) | 2021.07.23 |