유니티로 게임을 개발해본 사람은, OnTriggerEnter 혹은 OnCollisionEnter를 사용하여 무언가 이벤트가 발생하도록 해본 경우가 많을 것이다.
언리얼 엔진에서는 비슷한 것으로 OnComponentBeginOverlap 델리게이트가 있다.
여기서 Component는 Box/Capsule/Sphere Collision이 될 수 있겠다.
델리게이트라는 단어가 생소하다면, 이벤트라고 이해하면 된다.
https://docs.unrealengine.com/5.3/ko/delegates-and-lamba-functions-in-unreal-engine/
UnityEvent를 사용해봤다면 이해가 쉬울 것이다. 리스너 함수를 줄줄이 달아놓고 뻥뻥 터뜨리는 것과 같다.
OnComponentBeginOverlap도 델리게이트로, 그 사용법은 다음과 같다.
- 상황에 맞는 콜백 함수를 만든다.
- (해당 상황 델리게이트).AddDynamic(Arg1, Arg2)으로 리스너를 달아준다.
- Arg1: 콜백 함수가 있는 객체의 주소
- Arg2: 콜백 함수의 주소 (함수 포인터)
아래는 사용 예시이다.
// Called when the game starts or when spawned
void AItem::BeginPlay()
{
Super::BeginPlay();
Sphere->OnComponentBeginOverlap.AddDynamic(this, &AItem::OnSphereOverlap);
Sphere->OnComponentEndOverlap.AddDynamic(this, &AItem::OnSphereOverlapEnd);
}
void AItem::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
AKannaCharacter* KannaCharacter = Cast<AKannaCharacter>(OtherActor);
if (KannaCharacter)
{
KannaCharacter->SetOverlappingItem(this);
}
}
void AItem::OnSphereOverlapEnd(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
{
AKannaCharacter* KannaCharacter = Cast<AKannaCharacter>(OtherActor);
if (KannaCharacter)
{
KannaCharacter->SetOverlappingItem(nullptr);
}
}
USphereComponent* Sphere(구형 콜라이더 포인터)의 BeginOverlap, EndOverlap에 적절한 함수를 바인딩해주었다.
해당 코드에 따르면, 아이템의 Component인 구체 콜라이더에 캐릭터가 들어올 시 OverlappingItem을 자기 자신으로 설정하고, 콜라이더에서 캐릭터가 나갈 시에는 OverlappingItem을 다시 널 포인터로 설정해준다.
유니티에서 OnTriggerEnter(), OnCollisionEnter() 내부에 직접 코드를 짰던 것과는 조금 다르다. (바인딩 필요)
언리얼 쪽이 조금 더 복잡하지만, 여러개의 콜라이더에 따로따로 원하는 바인딩을 해줄 수 있기 때문에 유연성이 더 뛰어나다.
'언리얼 엔진 5 > 공부' 카테고리의 다른 글
[언리얼 엔진 5] 라이브 코딩 내용이 적용이 안될 때 (0) | 2023.12.25 |
---|---|
[언리얼 엔진 5] 프로젝트에 모듈을 추가하는 방법 (0) | 2023.12.20 |
[언리얼 엔진 5] BlueprintNativeEvent에 대해서, 사용 시 주의할 점 (0) | 2023.12.17 |
[언리얼 엔진 5] 애니메이션 사운드 (0) | 2023.12.16 |
[언리얼 엔진 5] Blend Space 방향 전환이 부자연스러울 경우 확인할 것 (0) | 2023.12.15 |