오늘의 목표
언리얼 5강 과제 - 인터페이스
인터페이스
순수 가상 함수 사용 가능
인터페이스를 공유하는 아이템 만들 때, 부모쪽에 구현 XX
부모쪽에 구현한 기능을 상속받아서 함께 쓰는 형식은 좋지 않음. 개별 아이템에서 따로 구현할 것
// 평생 가지고 있을 아이들이 아님, TWeakObjectPtr 사용
UPROPERTY(EditAnywhere)
TArray<TWeakObjectPtr<AActor>> Items;
보관할 아이템 AActor를 TWeakObjectPtr로 감싸준다. 이렇게 해서 자동으로 언리얼에서 제거하도록 함
OnFireDetected 라는 함수를 블루프린트에서 사용할 수 있도록 수정해주는 방법
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Interface")
void OnFireDetected(float Temperature, FVector HitLocation);
virtual, 가상함수(= 0)를 빼고 UFUCNTION(BlueprintCallable, BlueprintNativeEvent)를 넣어준다.
델리게이트
C++ 전용 AddUObject 바인딩
함수포인터를 직접 참조해서 실행속도가 빠름.
단점: 블루프린트에서 못 쓴다
AddDynamic -> 블루프린트까지 허용하겠다.
싱글 1대 1 대응 -> Bind
멀티 1대 다수 -> Add
앞부분 Bind/Add
뒷부분 UObject/Dynamic
오브젝트, SharedPtr, Lamda, Static, UFUNCTION
오브젝트 = 델리게이트.BindUObject(객체, &UMyObject::함수); -> 제일 자주 씀
스마트 포인터 = 델리게이트.BindSP(객체, &UMyObject::함수);
람다 = 델리게이트.BindLamda([](){});
스태틱 = 델리게이트.BindStatic(객체, &UMyObject::함수);
UFUNCTION = 델리게이트.BindUFunction(객체, TEXT("함수이름"));
싱글 C++ -> BindUObject
멀티 C++ -> AddUObject
싱글 Dynamic -> BindDynamic
멀티 Dynamic -> AddDynamic
블루프린트와 연동하는 Dynamic UFUNCTION() 연결해줘야됨
실행을 위한 신호 주기
싱글 1대1 대응 = Execute();
멀티 1대 다수 = Broadcast();
싱글캐스트는 반드시 Execute전에 IsBound
싱글은 바인딩이 꼭 되어야 함. (없을 시 크래시)
검사 : MySingleDelegate.IsBound()
MySingleDelegate.Execute()
블루프린트로 받아올 경우
c++에서 객체로 만들고, 그 객체를 통해서 블루프린트 델리게이트를 만들어줌
UPROPERTY(BlueprintAssignable)
FDeath OnDeath
'Unreal5 공부 > TIL' 카테고리의 다른 글
| 2026/06/10 TIL (0) | 2026.06.10 |
|---|---|
| 2026/06/05 TIL (0) | 2026.06.05 |
| 2026/06/02 TIL (0) | 2026.06.02 |
| 2026/06/01 TIL (0) | 2026.06.01 |
| 2026/05/29 TIL (0) | 2026.05.29 |