지난 글에서 마지막에 왜 SweepSingleByChannel() return 값이 한번만 True가 되는지 삽질해보니,
피격 시 공격자를 바라보게 추가한 코드에
SetActorEnableCollision(false);
이게 들어가 있었다...해당 코드가 실행되면, Collision이 False로 바껴서
충돌 판정을 안하게 바껴있기 때문이었다..하아..
삽질은 힘들지만, 그래도 해결했을 때 보람은 있는 것 같다.
오늘은 캐릭터 위젯을 추가해볼거다.
위젯이라는 건 예를 들면, 캐릭터 체력바 같은 UI를 추가하는 거다.
이번 글에서는 캐릭터 피통과 이름을 추가해보려 한다.
먼저 위젯 블루프린트 추가하기.
이후, 블루프린트 편집창에서 우측 상단에 해당 값을 Custom으로 변경.
그리고 나서 오른쪽의 팔레트 메뉴에서 세로박스, 스페이서, 프로그레스 바를
각각 아래의 [BP_HPWidget] 밑으로 드래그 앤 드랍해준다.
이후에, 오른쪽 메뉴에서 기호에 맞게 모양을 잡아준다.
여기까지 한 후 소스를 편집해준다.
먼저 MyCharacter.h에 아래 소스 추가.
UPROPERTY(VisibleAnywhere, Category = UI)
class UWidgetComponent* HPBarWidget;
MyCharacter.cpp 생성자에 아래 소스 추가.
HPBarWidget = CreateDefaultSubobject<UWidgetComponent>(TEXT("HPBARWIDGET"));
HPBarWidget->SetupAttachment(GetMesh());
HPBarWidget->SetWidgetSpace(EWidgetSpace::Screen); // Screen은 2D, World는 3D
static ConstructorHelpers::FClassFinder<UUserWidget> UI_BAR(TEXT("WidgetBlueprint'/Game/BluePrint/UI/BP_HPWidget.BP_HPWidget_C'")); // BP 참조할때는 _C 붙여줘야 한다.
if (UI_BAR.Succeeded())
{
HPBarWidget->SetWidgetClass(UI_BAR.Class);
HPBarWidget->SetDrawSize(FVector2D(150.0f, 30.0f));
}
이렇게 소스를 추가해주고 나면 에러가 날건데,
#include "Components/WidgetComponent.h"
를 추가해주면 해결된다.
그리고 빌드가 안될 경우에는
위처럼, 프로젝트네임.Build.cs에 "UMG"를 추가해주면 해결된다.
여기까지 하고 실행해보면, 발 밑에 내가 만든 UI가 추가된 걸 확인할 수 있다.
이제 위치를 좀 조정해보자.
MyCharacter.h에 아래 소스 추가.
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = UI, Meta = (AllowPrivateAccess = true))
float HPHeight;
MyCharacter.cpp 에 아래 소스 추가.
void AMyCharacter::BeginPlay()
{...
if (HPBarWidget)
HPBarWidget->SetRelativeLocation(FVector(0.0f, 0.0f, HPHeight));
}
이렇게 하면 블루프린트 편집기에서 UI 속성이 생기고, 거기서 HP바의 높이를 직접 설정할 수 있다.
이제 HP Bar가 생겼다.
해당 과정을 똑같이 반복해서 Name도 추가할 수 있다.
이름을 추가할 땐 주의해야할 사항이 있는데, 글이 너무 길어지니
다음글에서 설명하도록 하겠다.
'언리얼엔진' 카테고리의 다른 글
언리얼 엔진 활용하기 - 11. AI 추가 (0) | 2023.02.27 |
---|---|
언리얼 엔진 활용하기 - 10. 캐릭터 위젯 추가하기2 (0) | 2023.02.27 |
언리얼 엔진 활용하기 - 8. 이펙트 추가하기 (0) | 2023.02.20 |
언리얼 엔진 활용하기 - 7. 피격모션 추가하기 (Collision) (0) | 2023.02.20 |
언리얼 엔진 활용하기 - 6. Animation Montage(공격 모션 추가) (0) | 2023.02.20 |