24 - UMG

Overcle·2023년 3월 6일
0

학원

목록 보기
17/29

기존 선생님 사정으로 인해 1주일간 보조 강사 선생님이 진행.

요약
1. UMG - Unreal Motion Grapic. 게임에서 필요한 UI를 언리얼에서 제공하는 기능.
2. 이미 언리얼에 UMG가 구현되어 있다(UserWidget). 그걸 BP로 구현해서 작업한다.
3. 위젯 블루프린트는 자식이 1개밖에 추가를 못한다. 그래서 스케일박스 추가하고 그 안으로
추가하는 방식이다.

용어 설명
1. 스케일 박스 :
해상도 역할을 하며. 박스 안에 있는 OBj는 스케일박스 크기가 변동되면 같이 변동된다. 해상도를 맞추고 해도 추출된 게임에서는 어쩌피 사용자 모니터에 맞게 늘어난다.
2. 크기 박스 :
스케일박스 안에있더라도 변동이 안되는 고정된 크기박스이며, 최저 크기 비율을 지정하는 용도로 쓰인다.
3. 캔버스 :
각종 UI 집합소이다. HP, Minimap 등등. 왠만하면 각각 정보를 별도로 생성해서 관리한다.

Tip
1. C++을 기능을 다 만들고 최종적으로 사용할때 블루프린트를 생성해서 설정한다.
이유는 회사는 1인회사가 아니다 기획자, 디자이너가 있다. 협업이 베이스이기 떄문에.
직관적인 블루프린트가 좋다
2. 프로그래스 바 이미지를 사용할 때. 외관색상을 1로 설정해야 이미지의 색상이 사용된다.
아닐시 외관rpb값을 곱셈하기 때문.

따로 공부해서 정리해둘것
1. 가상함수. (매일공부해서 머리에 걍 박아야할듯)
2. 업케스팅 다운케스팅 (이것도 접시에 담아서 머리 박고있어야할듯)

UMG - Unreal Motion Graphic


HUD는
Head Up Display의 약자 이며 요즘은 사용을 안하는 기능이다.
요즘은 UMG를 사용한다.

블루프린트 폴더에 UMG 새폴더 생성.

우클릭 > 유저 인터페이스 > 위젯 블루 프린트 > 새 위젯 > "UI_MainHUD" 생성

스케일 박스 추가.
그안에 크기박스 추가
그안에 켄버스 패널 추가

스케일 박스:
스케일 박스의 역할은 영역을 지정해 놓고 안에있는 오브젝트를 스케일 박스가 커질떄 같이 커지게하는 역할이다. 해상도인듯?

크기 박스 :
고정된 크기. 스케일 박스 크기가 변동되더라도 크기박스의 비율은 고정.
최소 해상도 비율을 유지하는 역할을 한다.

캔버스 패널 :
각종 HP, MiniMap, 등등 UI를 추가할 Obj이다.

새 위젯 블루프린터 생성. "UI_PlayerInfo"



PlayerInfo를 MainHUD에 추가

블루프린트로 연동하는법. - 권장하지않음


HP의 경우 플레이어와 정보를 전달받아야하는데 블루프린트 보단 C++이 더 빠르고 편하다.



C++ 코드로 연동하는법


GameMode cpp 파일의 BeginPlay부분을 수정하면 된다.

1. Build.cs 모듈 추가 / "UMG", "UMGEditor"

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","AIModule","GameplayTasks","NavigationSystem","UMG", "UMGEditor" });

2. GameModeBase.h 해더 추가

#include "Blueprint/UserWidget.h"

3. GameModeBase.h 변수 선언

private:
TSubclassOf<UUserWidget>	m_MainHUDClass;
UUserWidget*				m_MainHUD;

4. GameModeBase.cpp / BPC 위젯 추가, 구현 설정 / 비 관련 코드 제외

AUE11GameModeBase::AUE11GameModeBase()
{
ConstructorHelpers::FClassFinder<UUserWidget> Finder(TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/Blueprints/IJH/UMG/UI_MainHUD.UI_MainHUD_C'"));

	if (Finder.Succeeded())
	{
		m_MainHUDClass = Finder.Class;
	}
}

void AUE11GameModeBase::BeginPlay()
{
	Super::BeginPlay();

	if (IsValid(m_MainHUDClass))
		m_MainHUD = CreateWidget(GetWorld(), m_MainHUDClass);
		m_MainHUD->AddToViewport();
}

MainHUD, PlayerInfo UI 부모클래스 지정


이번 수업에서는 깡통 클래스만 만들고 부모클래스 지정까지만 함.



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

0개의 댓글