25 - UMG, Monster UI_HP

Overcle·2023년 3월 7일
0

학원

목록 보기
18/29

요약
1.

용어 설명
1.

Tip
1. UI 렌더링 순서는 우선 왼쪽 캔퍼스 체널 나열된 위치로 할 수 있지만. Z순서로도 변경 가능하다
2. NativeConstruct는 BeginPlay 후에 호출된다.

따로 공부해서 정리해둘것
1.

상속


언리얼은 최상위단인 Level에서는 Actor가 필수여야한다. Scene 도 있다.
Character 클래스 상속을 전체적으로 보면.

Level -> Actor -> Pawn -> Character -> PlayerCharacter 순으로 상속이 진행된다.

Pawn은 빙의부분들 담당하며.
Character는 Movement 부분을 담당한다.

각각 담당하는 부분이 있으며.
Actor 소멸자엔 하위 클래스 소멸자도 포함되어있기에. 따로 메모리 관리를 안해도 된다.

UMG


ViewPort가 아닌 World에 추가 되는 경우.?

몬스터 캐릭터 위에 떠있는 UI나, 길찾기 시스템에서 화살표 같은 3D UI는 World에 속해야한다.

viewport : 체력바, 인벤토리, 미니맵 등등
world : 몬스터 위 체력바, 길찾기.

Monster 머리 위 체력바 구현



프로그래스바 배경 이미지 스타일 알파값 0 변경
보더 추가

보더 색상 검정으로 설정.

HP_Bar 크기 살짝 작게 설정

Scene Component 상속 받은 Actor에 추가


데이터를 주고 받아야 하니.
C++ 클래스를 만들어 어제 만든것처럼 클래스 지정. "MonsterHPBase"

1. MonsterHPBase.h 설정

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "../GameInfo.h"
#include "Blueprint/UserWidget.h"
#include <Components/ProgressBar.h>

#include "MonsterHPBase.generated.h"

/**
 * 
 */
UCLASS()
class UE11_API UMonsterHPBase : public UUserWidget
{
	GENERATED_BODY()
private:
	UProgressBar* m_HPBar;

public:
	void SetHP(float _Ratio);

public:
	virtual void NativeConstruct() override;
	virtual void NativeTick(const FGeometry& _geo, float _DeltaTime) override;
};

2. MonsterHPBase.cpp 설정

// Fill out your copyright notice in the Description page of Project Settings.


#include "MonsterHPBase.h"

void UMonsterHPBase::NativeConstruct()
{
	Super::NativeConstruct();

	m_HPBar = Cast<UProgressBar>(GetWidgetFromName(FName(TEXT("HP_Bar"))));
}

void UMonsterHPBase::NativeTick(const FGeometry& _geo, float _DeltaTime)
{
	Super::NativeTick(_geo, _DeltaTime);
}

void UMonsterHPBase::SetHP(float _Ratio)
{
	if(IsValid(m_HPBar))
	m_HPBar->SetPercent(_Ratio);
}

3. Monster.h 및 cpp 구현, / 비 관련 코드 제외

[Monster.h]
#include <Components/WidgetComponent.h>

protected:
	float m_Ratio;
[Monster.cpp]

#include "../UMG/MonsterHPBase.h

AMonster::AMonster() : m_Ratio(1.f)
{
}

void AMonster::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	// Widget Component가 지정한 MonsterHPBase Widget Progress Bar를 조정한다

	UMonsterHPBase* HPWidget = Cast<UMonsterHPBase>(mWidgetComponent->GetWidget());
	m_Ratio -= DeltaTime * 0.05f;

	if (IsValid(HPWidget))
	{
		HPWidget->SetHP(m_Ratio);
	}
}

결과

profile
게임 프로그래머 지망생의 발자취

0개의 댓글