함수 선언
함수 는 두 가지 기본 형태로 존재할 수 있습니다. 일반 C++ 함수 또는 UFunction
입니다. C++ 함수 및 UFunction
둘 다 .h
클래스 헤더 파일에 선언됩니다. C++ 함수를 선언할 때는 표준 C++ 문법을 사용합니다. UFunction
은 특수 문법을 사용해서 함수 지정자 를 통해 선언에 함수 관련 추가 정보를 지정합니다.
UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)]) ReturnType FunctionName([Parameter, Parameter, ...])
UFunction
은 C++ 구현이 있고, C++ 코드 안에서 호출할 수 있으며, 함수 본문 내에서 다른 C++ 함수 또는 UFunction
에 대한 호출을 포함할 수 있다는 점에서 C++ 함수와 동일하게 작동합니다. 그러나 몇 가지 다른 부분이 있습니다. 예를 들어 블루프린트 비주얼 스크립팅 시스템 안에서 호출 또는 오버라이드 가능합니다. BlueprintCallable
, BlueprintImplementableEvent
, 또는BlueprintPure
지정자로 선언된 UFunction
은 (자세한 내용은 아래 함수 지정자 참고) 블루프린트에 노출됩니다. 클래스의 디폴트 프로퍼티 내 델리게이트로 할당할 수도 있습니다. Input
클래스에서 함수에 입력 동작 또는 축을 바인딩할 때 흔히 사용되는 기법이구요. 리플리케이션 콜백으로도 사용됩니다. 즉 연결된 변수가 변경되어 네트워크에 리플리케이트될 때 UFunction
이 호출된다는 뜻입니다. 실행 함수로 선언해서 플레이어가 플레이 도중 게임내 콘솔에서 호출하도록 할 수 있는 유일한 함수 유형이기도 합니다.
함수 지정자
함수 선언시, Function Specifier (함수 지정자)를 선언에 붙여 함수가 엔진과 에디터의 다양한 부분과 어떻게 작동하는지를 제어할 수 있습니다.
함수 지정자 | 효과 |
---|---|
BlueprintAuthorityOnly |
네트워크 전권이 있는 머신(서버, 데디케이티드 서버, 싱글플레이어 게임)에서 이 함수를 실행하는 경우, 블루프린트 코드에서만 실행됩니다. |
BlueprintCallable |
이 함수는 블루프린트 또는 레벨 블루프린트 그래프에서 실행할 수 있습니다. |
BlueprintCosmetic |
이 함수는 장식성이라 데디케이티드 서버에서는 실행되지 않습니다. |
BlueprintGetter |
이 함수는 블루프린트 노출 프로퍼티에 대한 접근자로 사용됩니다. 이 지정자는 BlueprintPure 와 BlueprintCallable 을 내포합니다. |
BlueprintImplementableEvent |
이 함수는 블루프린트 또는 레벨 블루프린트 그래프에서 구현할 수 있습니다. |
BlueprintInternalUseOnly |
이 함수는 최종 사용자에게 노출시키지 말아야 함을 나타냅니다. |
BlueprintNativeEvent |
이 함수는 블루프린트 로 덮어쓰도록 디자인되었지만, 기본 내장 구현이 있기도 합니다. 메인 함수 이름 끝에 _Implementation 를 붙인 함수를 추가로 선언한 뒤 코드를 작성하면 됩니다. 자동생성 코드는 블루프린트 오버라이드를 찾지 못하면 "_Implementation" 메서드를 호출합니다. |
BlueprintPure |
이 함수는 어떤 식으로든 소유 오브젝트에 영향을 주지 않으며, 블루프린트 또는 레벨 블루프린트 그래프에서 실행할 수 있습니다. |
BlueprintSetter |
이 함수는 블루프린트 노출 프로퍼티의 뮤테이터로 사용됩니다. 이 지정자는 BlueprintCallable 을 내포합니다. |
CallInEditor |
이 함수는 디테일 패널의 버튼을 통해 선택된 인스턴스 상의 에디터에서 호출할 수 있습니다. |
Category = "TopCategory\|SubCategory\|Etc" |
이 함수를 블루프린트 편집 툴에 표시할 때의 카테고리를 지정합니다. 중첩 카테고리는 | 연산자로 표시합니다. |
Client |
이 함수는 호출되는 오브젝트를 소유한 클라이언트에서만 실행됩니다. 메인 함수 이름 뒤에 _Implementation 를 붙인 함수를 추가로 선언합니다. 자동 생성 코드는 필요할 때 "_Implementation" 머소드를 호출합니다. |
CustomThunk |
UnrealHeaderTool 코드 생성기는 이 함수에 대해 썽크를 생산하지 않으며, 사용자가 제공해 줘야 합니다. |
Exec |
이 함수는 게임 내 콘솔에서 실행할 수 있습니다. 실행 명령은 특정 클래스 안에서 선언했을 때만 작동합니다. |
NetMulticast |
이 함수는 서버 로컬 및 모든 클라이언트에 리플리케이트되는 상황 양쪽에서, 액터의 NetOwner 와 상관 없이 실행됩니다. |
Reliable |
이 함수는 네트워크로 리플리케이트되며, 대역폭이나 네트워크 오류와 상관 없이 도착이 보장됩니다. Client 또는 Server 와 함께 사용했을 때만 유효합니다. |
SealedEvent |
이 함수는 서브클래스에서 덮어쓸 수 없습니다. SealedEvent 키워드는 이벤트에만 사용할 수 있습니다. 이벤트가 아닌 함수의 경우, static 또는 final 로 선언하면 봉인할 수 있습니다. |
ServiceRequest |
이 함수는 RPC (Remote Procedure Call) 서비스 요청입니다. |
ServiceResponse |
이 함수는 RPC 서비스 반응입니다. |
Server |
이 함수는 서버에서만 실행됩니다. 메인 함수 이름 뒤에 _Implementation 를 붙인 함수를 추가로 선언하고, 기거서 코드를 작성합니다. 자동생성 코드는 필요할 때 "_Implementation" 메서드를 호출합니다. |
Unreliable |
이 함수는 네트워크로 리플리케이트되지만 대역폭 제한이나 네트워크 오류로 인해 실패할 수 있습니다. Client 또는 Server 와 함께 사용했을 때만 유효합니다. |
WithValidation |
메인 함수 이름 뒤에 _Validation 를 붙인 함수를 추가로 선언합니다. 이 함수는 같은 파라미터를 받으며, 메인 함수 호출 진행 여부를 나타내는 bool 을 반환합니다. |
메타데이터 지정자
메타데이터 지정자 사용법은 일반적인 클래스, 함수, 인터페이스 지정자와는 다릅니다.
함수 메타 태그 | 효과 |
---|---|
AdvancedDisplay="Parameter1, Parameter2, .." |
쉼표로 구분된 파라미터 목록이 (UI 확장이 필요한) 고급 핀으로 표시됩니다. |
AdvancedDisplay=N |
N 번째 이후 모든 파라미터는 (UI 확장이 필요한) 고급 핀으로 표시됩니다. 예로 'AdvancedDisplay=2' 는 첫째 둘째를 제외한 전부가 고급 파라미터가 됩니다. |
ArrayParm="Parameter1, Parameter2, .." |
BlueprintCallable 함수는 Call Array Function 노드를 사용하고, 나열된 파라미터는 와일드카드 배열 프로퍼티로 취급해야함을 나타냅니다. |
ArrayTypeDependentParams="Parameter" |
ArrayParm 사용 시, ArrayParm 목록 내 모든 파라미터 유형을 결정하는 파라미터를 지정합니다. |
AutoCreateRefTerm="Parameter1, Parameter2, .." |
나열된 파라미터는 참조 전달이라 할지라도, 핀을 연결하지 않고 놔둬도 자동 생성 기본값을 갖습니다. 블루프린트 편의 기능입니다. |
BlueprintAutocast |
블루프린트 함수 라이브러리의 스태틱 BlueprintPure 함수에서만 사용됩니다. 반환형과 함수 첫 파라미터 유형에 대한 형변환 노드가 자동 추가됩니다. |
BlueprintInternalUseOnly |
이 함수는 내부 구현 디테일로, 다른 함수 또는 노드 구현에 사용됩니다. 블루프린트 그래프에 바로 노출되지는 않습니다. |
BlueprintProtected |
이 함수는 블루프린트의 소유 오브젝트에서만 호출 가능합니다. 다른 인스턴스에서는 호출할 수 없습니다. |
CallableWithoutWorldContext |
WorldContext 핀이 있는 BlueprintCallable 함수에서, 클래스가 GetWorld 함수를 구현하지 않더라도 함수 호출이 가능함을 나타내는 데 사용됩니다. |
CommutativeAssociativeBinaryOperator |
BlueprintCallable 함수가 Commutative Associative Binary (이항 가환 결합) 노드를 사용해야 함을 나타냅니다. 이 노드는 핀 이름이 없지만, "Add Pin" (핀 추가) 버튼이 있어 입력 핀을 추가할 수 있습니다. |
CompactNodeTitle="Name" |
BlueprintCallable 함수가 간략 표시 모드로 표시해야 함을 나타내며, 그 모드에서 표시할 이름을 제공합니다. |
CustomStructureParam="Parameter1, Parameter2, .." |
나열된 파라미터는 모두 와일드카드로 취급됩니다. 이 지정자는 커스텀 |
DefaultToSelf |
BlueprintCallable 함수에 대해, 오브젝트 프로퍼티의 기본 값은 노드의 셀프 컨텍스트가 되어야 함을 나타냅니다. |
DeprecatedFunction |
이 함수를 참조하는 블루프린트는 컴파일 경고를 통해 사용자에게 함수가 폐기되었음을 알립니다. DeprecationMessage 메타데이터 지정자를 사용하면 (폐기된 함수 대체 안내문 제공과 같은) 폐기 경고 메시지를 추가할 수 있습니다. |
DeprecationMessage ="Message Text" |
함수가 폐기되면, 그것을 사용하는 블루프린트를 컴파일하려 할 때 표준 폐기 경고에 이 메시지가 추가됩니다. |
DevelopmentOnly |
이 함수는 개발 모드에서만 실행됩니다. 출시 제품에 포함시키지 않을 것으로 기대되는 디버그 출력같은 기능에 좋습니다. |
DisplayName="Blueprint Node Name" |
블루프린트의 이 노드 이름은 코드 생성 이름이 아닌 여기 제공된 값으로 대체됩니다. |
ExpandEnumAsExecs="Parameter" |
BlueprintCallable 함수에 대해, 파라미터에 사용되는 enum 각 항목에 대해 하나의 입력 실행 핀을 생성해야 함을 나타냅니다. 네임드 파라미터는 반드시 엔진에서 UENUM 태그로 인식되는 열거형이어야 합니다. |
HidePin="Parameter" |
BlueprintCallable 함수에 대해, 파라미터 핀을 사용자 뷰에서 숨겨야 함을 나타냅니다. 참고로 함수 당 단 하나의 파라미터만 이런 식으로 숨길 수 있습니다. |
HideSelfPin |
함수 호출 대상 오브젝트를 나타내는 데 사용되는 "self"(셀프) 핀을 숨깁니다. 셀프 핀은 호출하는 블루프린트 클래스와 호환되는 BlueprintPure 함수에서는 자동으로 숨겨집니다. 보통 DefaultToSelf 지정자와 함께 사용합니다. |
InternalUseParam="Parameter" |
HidePin 과 비슷하게, 사용자 관점에서 해당 이름의 파라미터 핀을 숨깁니다. 함수 당 하나의 파라미터에만 사용할 수 있습니다. |
KeyWords="Set Of Keywords" |
블루프린트 그래프에서 함수 호출을 위한 노드를 배치할 때처럼, 이 함수 검색 시 사용할 수 있는 키워드 세트를 지정합니다. |
Latent |
잠복성 동작을 나타냅니다. 잠복성 동작은 FLatentActionInfo 유형 파라미터가 하나 있으며, 이 파라미터 이름은 LatentInfo 지정자로 지정합니다. |
LatentInfo="Parameter" |
잠복성 BlueprintCallable 함수에 대해 어느 파라미터가 LatentInfo 파라미터인지 나타냅니다. |
MaterialParameterCollectionFunction |
BlueprintCallable 함수에 대해, 머티리얼 오버라이드 노드를 사용해야 함을 나타냅니다. |
NativeBreakFunc |
BlueprintCallable 함수에 대해, 표준 Break Struct 노드와 같은 식으로 함수를 표시해야 함을 나타냅니다. |
NotBlueprintThreadSafe |
블루프린트 함수 라이브러리에서만 유효합니다. 이 함수는 소유 클래스의 일반 BlueprintThreadSafe 메타데이터에 예외로 취급됩니다. |
ShortToolTip="Short tooltip" |
부모 클래스 선택기 대화창처럼 전체 툴팁 표시가 버거운 상황에서 사용할 짧은 툴팁입니다. |
ToolTip="Hand-written tooltip |
코드 코멘트에서 자동 생성되는 툴팁을 덮어씁니다. |
UnsafeDuringActorConstruction |
이 함수는 액터 생성 도중 호출하는 것이 안전하지 않습니다. |
WorldContext="Parameter" |
BlueprintCallable 함수에서 어느 파라미터가 연산이 일어나는 월드를 정하는지 나타냅니다. |
함수 파라미터 지정자
Out | 파라미터를 참조 전달로 선언하여 함수가 수정할 수 있도록 합니다. |
Optional | 특정 함수 파라미터를 호출자 편의를 위한 선택사항으로 만듭니다. 이 옵셔널 파라미터 값은 호출자가 함수에 의존할 값으로 지정하지 않는 값입니다. 예를 들어 SpawnActor 함수가 위치와 회전을 옵셔널로 받는다면, 기본 위치와 회전은 스폰하는 액터의 루트 컴포넌트 값이 됩니다. 옵셔널 인수의 기본값은 = [value] 로 지정할 수 있습니다. 예: function myFunc(optional int x = -1) . 대부분의 경우 옵셔널 파라미터에 전달된 값이 없으면 해당 변수 유형의 기본값, 또는 제로(예: 0, false, "", none)가 사용됩니다. |
함수 구현
클래스 헤더 파일에 선언되는 함수는 클래스 소스 파일에 정의가 제공됩니다.
델리게이트
레퍼런스 및 사용법 정보는 델리게이트 문서를 참고하세요.