[UE5] Highlight

GamzaTori·2024년 10월 25일

UE5 C++

목록 보기
18/27

Highlight

  • 특정 오브젝트나 영역을 시각적으로 강조하는 기능
  • 게임 내에서 플레이어가 특정 오브젝트를 인식할 수 있도록 도와주는 역할
  • PostProcess Volume을 사용해 씬의 특정 부분에 효과를 주거나 Dynamic Material Instance를 이용해 오브젝트의 Meterial을 변경해서 강조할 수도 있다

Unreal Interface를 상속받은 C++ 클래스 생성

  • 만들어둔 Monster 클래스를 상속받은 블루프린트 클래스 생성
  • 몬스터를 만들어 몬스터에 마우스를 갖다대면 외곽선이 보이도록 만들어보자
// h
public:
	virtual void Highlight() = 0;
	virtual void UnHighlight() = 0;
  • Highlight를 On/Off 하는 가상 함수 생성

만들어둔 Character 클래스에 Highlight Interface를 상속받아 구현

// h
UPROPERTY(BlueprintReadOnly)
bool bHighlighted = false;		// Highlight 여부

// cpp
void AMyCharacter::Highlight()
{
	bHighlighted = true;
}

void AMyCaracter::UnHighlight()
{
	bHighlighted = false;
}

PlayerController에 공격대상과 Highlight 대상 추가

// h
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: 하이라이트 되고 있는 대상
// cpp
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;
}
profile
게임 개발 공부중입니다.

0개의 댓글