언리얼 Interface 사용 시 주의할 점

Lee Raccoon·2024년 8월 8일
0

1.BlueprintType? Blueprintable?

언리얼 Interface를 사용할 때 저 둘 중 하나가 붙어있지 않으면?
언리얼에서 인터페이스 함수를 못 가져와서 UFUNCTION으로 블루프린트에서 사용할 수 있게 해놓더라도
여기저기서 에러가 나는 참사가 벌어진다.

근데 저 두개의 차이가 무엇일까? 그냥 말 그대로 받아들이면 된다.

BlueprintType
말 그대로 타입, 블루프린트에서 가져와서 사용할 수 있는 타입이 될 수 있다는 것이라고 생각하면 된다.

Blueprintable
블루프린트로 만들 수 있다는 뜻이다. C++로 만들어진 인터페이스 클래스를 파생시켜서 블루프린트로 만들 수 있다.
확장할 일이 생기면 이를 사용하면 될 것이다.

2. BlueprintNavtiveEvent

	UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interaction")
	void DoInteraction();

이렇듯 상호작용 인터페이스를 만든다고 가정했을 때,
C++에서든 블루프린트에서든 구현하여 쓸 수 있도록 하려면 NativeEvnet를 사용하여야한다.

근데 이 상태에서 C++ 구현 도중 해당 함수를 호출을 그냥 원래 하던 대로 해버리면?

바로 크래시가 나버린다. (이 크래시는 위 예시 인터페이스랑은 무관)

BlueprintNativeEvent는 바로 호출이 금지되어 있다. 크래시를 읽어보면 Execute를 사용해서 함수를 호출해달라고 한다.
Execute_'함수명'(실행할 오브젝트, 인자1, 2...)이걸 대신해서 써주어야한다.

그래서 만약에 그냥 C++에서 사용하던 인터페이스가 갑자기 블루프린트에서도 사용이 되어야할 상황이 된다면 이를 유의해야한다.
무지성으로 NativeEvent를 붙여서 사용을 했다가는 무수한 곳에서 크래시가 터져버린다.
그렇게 바꿔줬다면 모든 호출부에서 Execute로 대체해주던가 아니면
블루프린트에서 사용할 인터페이스 함수를 따로 만들어서 사용하는게 오히려 나을 것이다.

위 크래시는 오늘 프로젝트에서 나타나버린 아주 싱싱한 예시이다..
본래 C++ 클래스에서만 사용하던 함수를 다른 사람이 필요로 의해 블루프린트에서 부를 수 있게 바꾸려다가 벌어진 상황이다.
타 개발자가 인터페이스 내 함수를 건드림으로써 충분히 벌어질 수 있는 상황이다.

만약 이런 상황이 되면 신중히, 해당 파트를 개발한 분에게 묻거나 레퍼런스를 확인해보고 작업을 해야겠다.

profile
영차 영차

0개의 댓글