[Unreal] UMG

2024. 6. 7. 14:39Β·πŸ“ Game/✏ Unreal

1. UMG

UMG(Unreal Motion Graphic)λŠ” μ–Έλ¦¬μ–Ό μ—”μ§„μ—μ„œ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό ꡬ성할 수 μžˆλŠ” μ œμž‘ νˆ΄μ΄λ‹€.

 

2. μ‚¬μš©

UMGμ—μ„œλŠ” UIλ₯Ό κ΅¬μ„±ν•˜λŠ” ꡬ성 μš”μ†Œλ“€μ„ μœ„μ ―(Widget)μ΄λΌλŠ” κ°œλ…μœΌλ‘œ μ‚¬μš©ν•˜λ©°, μœ„μ ― λΈ”λ£¨ν”„λ¦°νŠΈ(Widget Blueprint)μ—μ„œ 이 μœ„μ ―λ“€μ„ νŽΈμ§‘ν•˜μ—¬ UIλ₯Ό μ œμž‘ν•  수 μžˆλ‹€.

 

μœ„μ ― λΈ”λ£¨ν”„λ¦°νŠΈ

  • λ””μžμ΄λ„ˆνƒ­μ€ μ‹œκ°μ  λ ˆμ΄μ•„μ›ƒ ꡬ성을 μœ„ν•œ νŽΈμ§‘μ°½μ΄λ‹€.
  • κ·Έλž˜ν”„νƒ­μ€ μΈν„°λ ‰μ…˜ κΈ°λŠ₯을 μœ„ν•΄ 마련된 μ½”λ”© μ˜μ—­μ˜ νŽΈμ§‘μ°½μ΄λ‹€.

 

μœ„μ ―μ€ 계측 ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬ κ΅¬μ„±ν•˜λŠ” 것이 μ’‹λ‹€. κ΅¬ν˜„ν•˜κ³ μž ν•˜λŠ” 씬을 μ΅œμƒλ‹¨μœΌλ‘œ ν•˜μ—¬ 각각의 ꡬ성 μš”μ†Œλ“€μ„ λ°°μΉ˜ν•˜κ³   ꡬ성 μš”μ†Œκ°€ νŠΉμ •ν•œ κΈ°λŠ₯을 담을 κ²½μš°μ—” μœ„μ ―μœΌλ‘œ λ¬Άμ–΄μ„œ κ·Έλ£Ήν™”ν•œλ‹€.

  • μ΅œμƒμœ„ μœ„μ ―μ€ μΊ”λ²„μŠ€ νŒ¨λ„μ„ ν™œμš©ν•˜μ—¬ μœ„μ ―λ“€μ˜ λ ˆμ΄μ•„μ›ƒμ„ κ΅¬μ„±ν•œλ‹€.
  • ν•˜μœ„ μœ„μ ―μ€ νŠΉμ • κΈ°λŠ₯λ³„λ‘œ μ˜€λΈŒμ νŠΈλ“€μ„ κ·Έλ£Ήν™”ν•˜μ—¬ μ‚¬μš©ν•  수 있게 ν•΄ μ€€λ‹€. νŠΉλ³„ν•œ κΈ°λŠ₯이 μ—†κ±°λ‚˜ λ‹€λ₯Έ μ”¬μ—μ„œ μž¬μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄, ν•˜μœ„ μœ„μ ―μœΌλ‘œ κ΄€λ¦¬ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή μ”¬μ—μ„œ λ°”λ‘œ μž‘μ—…ν•˜λŠ” 것이 μ’‹λ‹€.

 

1) μœ„μ ― 생성

μœ„μ ―μ„ μƒμ„±ν•œ ν›„ νŒ”λ ˆνŠΈ μ±„λ„μ—μ„œ μ‚¬μš©μžκ°€ μƒμ„±ν•œ μœ„μ ―λ“€μ„ 확인할 수 μžˆλ‹€. 이 μœ„μ ―λ“€μ„ μ΅œμƒμœ„ μœ„μ ―(씬)에 λ°°μΉ˜ν•˜μ—¬ ν•˜λ‚˜μ˜ λ ˆμ΄μ•„μ›ƒμ„ ꡬ성할 수 μžˆλŠ” 것이닀.

 

μœ„μ ― 생성

 

2) 화면에 μ΅œμƒμœ„ μœ„μ ― 뢙이기

2-1) 레벨 λΈ”λ£¨ν”„λ¦°νŠΈ μ‚¬μš©

레벨 λΈ”λ£¨ν”„λ¦°νŠΈμ—μ„œ μ΅œμƒμœ„ μœ„μ ―μ„ μƒμ„±ν•˜κ³  κ·Έ μœ„μ ―μ„ 보여주도둝 μ„€μ •ν•œλ‹€.

 

레벨 λΈ”λ£¨ν”„λ¦°νŠΈ

 

2-2) κ²Œμž„ λͺ¨λ“œ μ‚¬μš©

κ²Œμž„ λͺ¨λ“œλ₯Ό ν™•μž₯ν•˜μ—¬ κ²Œμž„μ΄ μ‹œμž‘λ˜μ—ˆμ„ λ•Œ μœ„μ ―μ„ μƒˆλ‘œ λ§Œλ“€μ–΄μ„œ ν‘œμ‹œν•˜κ±°λ‚˜ λ‚˜μ€‘μ— 제거 및 λ³€κ²½ν•  수 μžˆλ„λ‘ ν•œλ‹€. κ²Œμž„ λͺ¨λ“œ μ‚¬μš©μ€ C++둜 κ΅¬ν˜„ν•΄ λ³Ό 것이닀.

 

public:
	UFUNCTION(BlueprintCallable, Category = "UMG_Game")
	void ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass);

protected:
	virtual void BeginPlay() override;

	UPROPERTY(EditAnyWhere, BlueprintReadOnly, Category = "UMG_Game")
		TSubclassOf<UUserWidget> StartingWidgetClass; // κ²Œμž„μ΄ μ‹œμž‘λ  λ•Œ ν‘œμ‹œλ  μœ„μ ―

	UPROPERTY()
		UUserWidget* CurrentWidget; // ν˜„μž¬ ν‘œμ‹œλ˜κ³  μžˆλŠ” μœ„μ ―
#include <Blueprint/UserWidget.h>

void AGameModeBase::BeginPlay()
{
	Super::BeginPlay();
	ChangeMenuWidget(StartingWidgetClass);
}

void AGameModeBase::ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass)
{
	if (CurrentWidget != nullptr) {
		CurrentWidget->RemoveFromViewport();
		CurrentWidget = nullptr;
	}

	if (NewWidgetClass != nullptr) {
		CurrentWidget = CreateWidget(GetWorld(), NewWidgetClass);
		if (CurrentWidget != nullptr)
			CurrentWidget->AddToViewport();
	}
}

 

3. ν™œμš©

이제 UMGλ₯Ό μ‚¬μš©ν•˜μ—¬ 타이틀 씬을 λ§Œλ“€μ–΄λ³Ό 것이닀.

 

타이틀 씬

 

타이틀 씬은 μ‹œμž‘ μ‹œ 타이틀과 메뉴가 보이며 GAME START λ²„νŠΌμ„ λˆ„λ₯΄λ©΄, μ‹œλ‚˜λ¦¬μ˜€κ°€ 보이도둝 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

 

μœ„μ ― 계측 ꡬ쑰

  • μ΅œμƒμœ„ μœ„μ ―
    • ν…μŠ€νŠΈ: 타이틀
    • ν•˜μœ„ μœ„μ ―: 메뉴
    • ν•˜μœ„ μœ„μ ―: μ‹œλ‚˜λ¦¬μ˜€

 

1) 메뉴 μœ„μ ―

메뉴 μœ„μ ―μ€ μ„Έλ‘œλ‘œ κ΅¬μ„±λœ λ ˆμ΄μ•„μ›ƒμ„ 효과적으둜 μ œμž‘ν•  수 μžˆλŠ” 버티컬 λ°•μŠ€μ™€ λ²„νŠΌ, μŠ€νŽ˜μ΄μ„œλ₯Ό μ‚¬μš©ν–ˆλ‹€. ꡬ체적인 λ²„νŠΌ Hover, Click λ“±μ˜ μž‘μ—…μ€ ν”„λ‘œμ νŠΈμ— 맞게 μ„€μ •ν•˜λ©΄ 될 것 κ°™λ‹€.

 

메뉴 μœ„μ ―

 

이제 μ‹œμž‘ν•  λ•Œ μ• λ‹ˆλ©”μ΄μ…˜κ³Ό ν•¨κ»˜ λ…ΈμΆœλ˜λ„λ‘ ν•  것이닀. μƒˆλ‘œμš΄ μ• λ‹ˆλ©”μ΄μ…˜μ„ ν•˜λ‚˜ μƒμ„±ν•œ ν›„ μƒμ„±ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ„ ν΄λ¦­ν•œ μƒνƒœλ‘œ λ²„νŠΌμ˜ Details νŒ¨λ„μ—μ„œ Color and Opacity μ˜† + μ•„μ΄μ½˜μ„ μ„ νƒν•˜μ—¬ ν•΄λ‹Ή 속성을 ν‚€ν”„λ ˆμž„μœΌλ‘œ μΆ”κ°€ν•œλ‹€. μΆ”κ°€λ‘œ 버티컬 λ°•μŠ€μ˜ Transform도 μΆ”κ°€ν•œλ‹€.

 

Details νŒ¨λ„

 

그럼 μ•„λž˜μ™€ 같이 μ—¬λŸ¬ ν‚€ν”„λ ˆμž„μ΄ μ• λ‹ˆλ©”μ΄μ…˜μ— μΆ”κ°€λœ 것을 확인할 수 있으며 μ›ν•˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.

 

메뉴 μ• λ‹ˆλ©”μ΄μ…˜ μˆ˜μ •

  • μœ„μ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ λ²„νŠΌμ΄ λ‚˜νƒ€λ‚  수 μžˆλ„λ‘ alphaλ₯Ό μˆ˜μ •ν–ˆλ‹€.
  • 메뉴 μœ„μ ―μ˜ μ΅œμƒλ‹¨μΈ 버티컬 λ°•μŠ€μ˜ position을 μˆ˜μ •ν–ˆλ‹€.

 

λ§ˆμ§€λ§‰μœΌλ‘œ κ·Έλž˜ν”„ νƒ­μ—μ„œ μ‹œμž‘ μ‹œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μž¬μƒμ‹œν‚€λ©΄ λœλ‹€.

 

메뉴 κ·Έλž˜ν”„ νƒ­

 

2) μ‹œλ‚˜λ¦¬μ˜€ μœ„μ ―

μ‹œλ‚˜λ¦¬μ˜€λŠ” 총 3개의 화면이 μ°¨λ‘€λŒ€λ‘œ λ³΄μ˜€λ‹€ 사라진닀. λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€κ°€ λλ‚˜λ©΄ Stage 1이 μ‹œμž‘λœλ‹€.

 

타이틀 씬 μ‹œλ‚˜λ¦¬μ˜€

 

3개의 화면을 μœ„ν•΄ 각각의 μ‹œλ‚˜λ¦¬μ˜€ μœ„μ ―μ„ μƒμ„±ν•œλ‹€. 이 μœ„μ ―λ“€μ€ 이미지와 ν…μŠ€νŠΈλ‘œ κ΅¬μ„±λœ λ‹¨μˆœν•œ μœ„μ ―μ΄λ‹€.

 

μ‹œλ‚˜λ¦¬μ˜€ μœ„μ ―

 

μ΅œμƒμœ„ μœ„μ ―μ— λ°°μΉ˜ν•œ ν›„ μ‹œλ‚˜λ¦¬μ˜€ μœ„μ ―λ“€μ„ λ°°μΉ˜ν•œ ν›„ μ‹œλ‚˜λ¦¬μ˜€ μ „ν™˜μ„ μœ„ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μΆ”κ°€ν•œλ‹€.

 

μ‹œλ‚˜λ¦¬μ˜€ μ• λ‹ˆλ©”μ΄μ…˜ μˆ˜μ •

  • μ‹œλ‚˜λ¦¬μ˜€ μœ„μ ―μ΄ κ°€μž₯ μ•žμ— 보여야 ν•˜κΈ° λ•Œλ¬Έμ— ZOrderλ₯Ό 배치된 λ‹€λ₯Έ μœ„μ ―λ³΄λ‹€ κ°€μž₯ 크게 μ„€μ •ν–ˆλ‹€.
  • μ‹œλ‚˜λ¦¬μ˜€ μˆœμ„œμ— 맞게 alphaλ₯Ό μ‚¬μš©ν•˜μ—¬ FadeIn/Out ν–ˆλ‹€.
  • μ• λ‹ˆλ©”μ΄μ…˜μ˜ μ‹œκ°„μ€ μ• λ‹ˆλ©”μ΄μ…˜ μž¬μƒ μ‹œ 쑰절 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μ‹œλ‚˜λ¦¬μ˜€ μ‚¬μ΄μ˜ FadeIn/Out μ‹œκ°„μ„ κ³ λ €ν•˜μ—¬ κ΅¬ν˜„ν–ˆλ‹€.

 

λ§ˆμ§€λ§‰μœΌλ‘œ κ·Έλž˜ν”„ νƒ­μ—μ„œ GAME START λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μž¬μƒμ‹œν‚€λ©΄ λ˜λŠ”λ°, μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ’…λ£Œλ˜λŠ” μ‹œμ μ— Stage 1으둜 이동을 ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— Animation Finished에 이벀트λ₯Ό Bind μ‹œμΌœ μ΄λ²€νŠΈκ°€ μ’…λ£Œλ  λ•Œ λ°”λ‘œ λ™μž‘ν•˜λ„λ‘ μΆ”κ°€ν–ˆλ‹€.

 

μ‹œλ‚˜λ¦¬μ˜€ κ·Έλž˜ν”„ νƒ­

 

μ°Έκ³ 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Game/✏ Unreal' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Unreal] κ²Œμž„ μΈμŠ€ν„΄μŠ€, μ„œλΈŒμ‹œμŠ€ν…œ
  • [Unreal] Object, Actor, Component
  • [Unreal][C++] λ°”λΌλ³΄λŠ” Actorμ—κ²Œ 효과 μ£ΌκΈ°
  • [Unreal][C++] 캐릭터 카메라 κ°œμ„ 
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[Unreal] UMG
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”