본문 바로가기
Unreal/Manual

Unreal 적의 체력이 화면을 정면으로 바라보도록 구현

by Dev_카페인 2024. 1. 9.
반응형

[Unreal/C++] 적의 체력이 화면을 정면으로 바라보도록 구현

 

언리얼에서 적의 체력을 표시할 때 간편하게 처리할 수 있는 기능이 있다.

그것은 위젯의 SpaceMode를 Screen으로 설정하는 것인데, 이는 화면 상에 고정적인 크기로 출력을 해주기 때문에 편리하지만 사용하지 못하는 환경이 많다. 적의 체력 같은 경우 멀리서는 보일 필요가 없고 시야가 가려질 경우 출력을 하지 않아야 하기 때문이다.

SpaceMode를 Screen으로 설정할 경우 아래 이미지와 같은 문제가 발생한다.

시야가 가려져 있음에도 불구하고 Widget이 벽을 뚫고 화면 상에 출력된다.

그래서 SpaceMode를 World로 바꿔서 사용해야 하는데 이는 캐릭터 기준으로 정면만을 바라본다.

체력이 화면상에 표시되려면 Widget이 항상 카메라를 바라보고 있어야 한다.

 

블루프린트 상에서는 아래와 같이 구현 가능하다.

 

 

Blueprint에서 보이는 GetWorldLocation이 C++ 코드에서는 K2_GetComponentLocation로 사용된다.

이는 SceneComponent.h에서 확인할 수 있다.

 

void MyCharacter::Tick(float DeltaSeconds)
{
	Super::Tick(DeltaSeconds);

	FVector cameraLocation = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0)->GetTransform().GetLocation();

	FVector hpLocation = HPWidget->K2_GetComponentLocation();
	FVector nameLocation = NameTagWidget->K2_GetComponentLocation();

	FRotator hpRotator = UKismetMathLibrary::FindLookAtRotation(hpLocation, cameraLocation);
	FRotator nameRotator = UKismetMathLibrary::FindLookAtRotation(nameLocation, cameraLocation);

	HPWidget->SetWorldRotation(hpRotator);
	NameTagWidget->SetWorldRotation(nameRotator);
	
}

 

적의 체력과 이름이 카메라를 바라보고 있고 벽을 뚫고 보이는 현상이 사라졌다.

 

 

 

3D widget always face to player character posted by anonymous | blueprintUE | PasteBin For Unreal Engine

No description provided

blueprintue.com

 

USceneComponent::GetComponentLocation

Return location of the component, in world space

docs.unrealengine.com

 

UKismetMathLibrary::FindLookAtRotation

Find a rotation for an object at Start location to point at Target location.

docs.unrealengine.com

 

반응형