Highlight
- 특정 오브젝트나 영역을 시각적으로 강조하는 기능
- 게임 내에서 플레이어가 특정 오브젝트를 인식할 수 있도록 도와주는 역할
- PostProcess Volume을 사용해 씬의 특정 부분에 효과를 주거나 Dynamic Material Instance를 이용해 오브젝트의 Meterial을 변경해서 강조할 수도 있다
Unreal Interface를 상속받은 C++ 클래스 생성
- 만들어둔 Monster 클래스를 상속받은 블루프린트 클래스 생성
- 몬스터를 만들어 몬스터에 마우스를 갖다대면 외곽선이 보이도록 만들어보자
public:
virtual void Highlight() = 0;
virtual void UnHighlight() = 0;
- Highlight를 On/Off 하는 가상 함수 생성
만들어둔 Character 클래스에 Highlight Interface를 상속받아 구현
UPROPERTY(BlueprintReadOnly)
bool bHighlighted = false;
void AMyCharacter::Highlight()
{
bHighlighted = true;
}
void AMyCaracter::UnHighlight()
{
bHighlighted = false;
}
PlayerController에 공격대상과 Highlight 대상 추가
protected:
virtual void PlayerTick(float DeltaTime) override;
private:
void TickCursorTrace();
private:
bool bMousePressed = false;
protected:
UPROPERTY(BlueprintReadOnly)
TObjectPtr<class AR1Character> TargetActor;
UPROPERTY(BlueprintReadOnly)
TObjectPtr<class AR1Character> HighlightActor;
- TickCursorTrace: 커서 위의 오브젝트를 추적하는 함수
- TargetActor: 현재 공격하고 있는 대상
- HighlightActor: 하이라이트 되고 있는 대상
void AMyPlayerController::PlayerTick(float DeltaTime)
{
Super::PlayerTick(DeltaTime);
TickCursorTrace();
}
void AMyPlayerController::TickCursorTrace()
{
if (bMousePressed)
{
return;
}
FHitResult OutCursorHit;
if (GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, true, OUT OutCursorHit) == false)
{
return;
}
AMyCharacter* LocalHighlightActor = Cast<AMyCharacter>(OutCursorHit.GetActor());
if (LocalHighlightActor == nullptr)
{
if (HighlightActor)
{
HighlightActor->UnHighlight();
}
}
else
{
if (HighlightActor)
{
if (HighlightActor != LocalHighlightActor)
{
HighlightActor->UnHighlight();
LocalHighlightActor->Highlight();
}
}
else
{
LocalHighlightActor->Highlight();
}
}
HighlightActor = LocalHighlightActor;
}