가까이 다가가면 자동으로 불이 켜지는 램프 액터를 만들어 봅니다.
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
'프로그래밍 > 언리얼엔진' 카테고리의 다른 글
언리얼엔진 강좌 65 [쥐를잡자-01] 쥐를잡자 찍찍찍 계획, 설계 (0) | 2023.11.12 |
---|---|
언리얼엔진 4 C++강좌 007 [actor-07] 액터에서 이벤트 발생시키기 (1) | 2023.11.12 |
언리얼엔진 4 C++강좌 005 [actor-05] C++ 클래스의 재사용성 - 다른 프로젝트에서도 사용 가능할까? (0) | 2023.10.29 |
언리얼엔진 4 C++강좌 006 [actor-06] 에디터에서 설정하면 실시간으로 액터에 반영되도록 하기 (0) | 2023.10.29 |
언리얼엔진 4 C++강좌 003 [actor-03] 로그 남기는 방법 (0) | 2023.10.23 |