카메라 거리 고정
캐릭터가 이동하다가 캐릭터 카메라 스프링암에 사물이나 다른 캐릭터가 겹쳐서 카메라의 거리가 바뀌는 상황이 생겨서 카메라 거리를 항상 고정시켰다.
CharacterBase.cpp에 생성자 함수에서 카메라 스프링암에
CameraBoom->bDoCollisionText = false;로 설정하여 카메라스프링암에 다른 물체나 사물이 충돌하면 거리 축소를 방지하였다.
캐릭터 체력바 추가
기본적으로 캐릭터마다 가지고 있을 체력바 위젯을 추가하기위해 새C++ 클래스로 UserWidget을 상속받는 위젯클래스를 추가해줬다.
SW_HP.h
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "SW_HP.generated.h"
class UProgressBar;
class UTextBlock;
UCLASS()
class TEAM4_CH4_PROJECT_API USW_HP : public UUserWidget
{
GENERATED_BODY()
public:
// 체력 UI 갱신 함수
void UpdateHealthBar(int32 CurrentHealth, int32 MaxHealth);
protected:
virtual void NativeConstruct() override;
UPROPERTY(meta = (BindWidget))
UProgressBar* HealthBar;
UPROPERTY(meta = (BindWidget))
UTextBlock* HealthCount;
};
SW_HP.cpp
#include "SW_HP.h"
#include "Components/ProgressBar.h"
#include "Components/TextBlock.h"
void USW_HP::NativeConstruct()
{
Super::NativeConstruct();
}
void USW_HP::UpdateHealthBar(int32 CurrentHealth, int32 MaxHealth)
{
if (HealthBar)
{
float Percent = (MaxHealth > 0) ? (float)CurrentHealth / (float)MaxHealth : 0.f;
HealthBar->SetPercent(FMath::Clamp(Percent, 0.f, 1.f));
}
if (HealthCount)
{
FString Text = FString::Printf(TEXT("%d / %d"), CurrentHealth, MaxHealth);
HealthCount->SetText(FText::FromString(Text));
}
}
추가로 지금은 확인용으로 체력바에 추가적으로 체력텍스트 블럭을 추가하여 최대체력과 현재체력을 확인할 수 있게 하였다.
그리고 나중에 SW_HP기반 블루프린트를 생성하고 체력바와 체력텍스트블럭에 이름은 무조건HealthBar와 HealthCount로 설정해줘야한다.
다음으로 CharacterBase에 생성자에 UWidgetComponent를 구현하고 캐릭터 메시에 부착하였다.
충돌, 그림자, 라이트 영향, 위치, 회전, 월드기준, 사이즈 등 초기화
차후에 체력변화 시 위젯 업데이트를 위해서 UpdateHealthBar()함수를 구현하였다.
캐릭터에 체력이 변경될때마다 UpdatehealthBar()함수를 호출하면 된다.
그리고 기본적으로 BeginPlay()함수에서 한번 호출하여 캐릭터 객체를 생성할때 기본적으로 캐릭터 체력위젯이 보이도록 하였다.
그리고 CharacterBase에 기본적인 MaxHealth변수와 Health변수를 Characterbase를 상속받는 캐릭터마다 조정하면 각 캐릭터마다 보이는 위젯이 다르게 설정된다.
CharacterBase를 상속받는 Dubu캐릭터와 Brall캐릭터의 체력을 다르게 설정해준다.
이제 언리얼에서 SW_HP위젯기반 블루프린트를 만들어준다.
체력바와 체력 텍스트박스 위치는 CharacterBase기반으로 조절이 잘 안되서 수동으로 여기서 수정해주었다.
(나중에 조정이 필요할 듯)
그리고 아까 설명했듯 SW_HP에서 체력바는 HealthBar로 변수명을 적어야하고, 체력 텍스트박스는 HealthCount로 변수명을 설정하여야한다.
이제 위치나 크기 조절을 하고,
캐릭터블루프린트로가면
CharacterBase를 상속받는 캐릭터들은 캐릭터메시에 Health Bar Widget컴포넌트가 붙어있을것이다.
Health Bar Widget을 누른상태로 디테일창에 가보면
유저 인터페이스 부분에 위젯클래스가 있을건데 아까 SW_HP C++기반 블루프린트로 생성한 위젯을 넣어주면 된다.
근데 만약 뷰포트에서 위젯이 캐릭터 머리위에 안보이면
유저 " 인터페이스에 원하는사이즈에서 드로부분 "에 체크를 해주자
그럼 이렇게 정상적으로 캐릭터 위에 붙어있을것이다.
이제 캐릭터마다의 체력이 정상적으로 작동하는지 확인해보면
정상적으로 작동하는것을 확인할 수 있다.
'Unreal Engine 5 > UE5 멀티대전게임 일기' 카테고리의 다른 글
UE5 멀티대전게임 일기(7) 캐릭터 TakeDamage함수 구현 (0) | 2025.04.07 |
---|---|
UE5 멀티대전게임 일기(6) 조율점 현재 상황 (0) | 2025.04.07 |
UE5 멀티대전게임 일기(4) 개별적으로 캐릭터 이동속도 구현 방법 (0) | 2025.04.06 |
UE5 멀티대전게임 일기(3) 스킬 시전 중 캐릭터 조작 잠금 구현 (0) | 2025.04.06 |
UE5 멀티대전게임 일기(2) 마우스가 보는 방향으로 캐릭터 방향 설정 (0) | 2025.04.06 |