프로그래밍/언리얼엔진

언리얼엔진 4 C++강좌 004 [actor-04] 가까이 다가가면 자동으로 불이 켜지는 램프 액터 만들기

panpro 2023. 10. 29. 16:48

가까이 다가가면 자동으로 불이 켜지는 램프 액터를 만들어 봅니다.

C++로 램프 액터를 만든 다음 box component를 추가하고 그 box에 뭔가 overlap 되는 이벤트가 발생하면, 그 이벤트를 처리해 램프에 불을 켜는 처리를 해 봅니다.

또한 overlapEnd 이벤트도 처리해 멀어지면 자동으로 불이 꺼지게 만들어 봅니다.

먼저 박스 컴퍼넌트를 추가해 봅니다.

// LampActor.h

UPROPERTY()
UBoxComponent* m_pBox;

그리고 박스에서 발생하는 이벤트를 받기 위해, OnOverlapBegin 이벤트와 OnOverlapEnd 이벤트를 아래와 같이 정의합니다.

// LampActor.h

UFUNCTION()
void OnOverlapBegin(UPrimitiveComponent* overlappedComp, AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep, const FHitResult& sweepResult);

UFUNCTION()
void OnOverlapEnd(UPrimitiveComponent* overlappedComp, AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex);

이제 생성자에서 박스 컴퍼넌트에서 발생하는 이벤트를 처리할 핸들러를 연결해 줍니다. 정확히는 그 이벤트를 처리할 핸들러를 추가해 주는 거죠. 하지만 그 이벤트를 처리할 핸들러가 하나일 뿐인거.

 

// LampActor.cpp

m_pBox->OnComponentBeginOverlap.AddDynamic(this, &ALampActor::OnOverlapBegin);
m_pBox->OnComponentEndOverlap.AddDynamic(this, &ALampActor::OnOverlapEnd);

이제 마지막으로 저 핸들러 안에 불이 켜지거나 꺼지는 처리를 해주면 됩니다.

 

// LampActor.cpp

void ALampActor::OnOverlapBegin(UPrimitiveComponent* overlappedComp, AActor * otherActor, UPrimitiveComponent * otherComp, int32 otherBodyIndex, bool bFromSweep, const FHitResult & sweepResult)
{
	if (otherActor && (otherActor != this) && otherComp)
	{
		m_pLight->SetVisibility(true);
		UE_LOG(LogTemp, Warning, TEXT("OnOverlap Begin!"));
	}
}



void ALampActor::OnOverlapEnd(UPrimitiveComponent * overlappedComp, AActor * otherActor, UPrimitiveComponent * otherComp, int32 otherBodyIndex)
{
	if (otherActor && (otherActor != this) && otherComp)
	{
		m_pLight->SetVisibility(false);
		UE_LOG(LogTemp, Warning, TEXT("OnOverlap End!!!"));
	}
}

전체 소스코드 github: https://github.com/easyprogstudy/ue4cppS01

 

GitHub - easyprogstudy/ue4cppS01: Unreal Engine 4 C++ study

Unreal Engine 4 C++ study. Contribute to easyprogstudy/ue4cppS01 development by creating an account on GitHub.

github.com