게임 개발/프로젝트

언리얼 내배캠 CH.3 팀 프로젝트 - 임무 선택 화면 만들기

이개 2026. 5. 11. 20:43

임무 선택 화면

왼쪽에 임무 버튼이 세로로 나열되고, 호버시 상세 내용이 뜬다.

 

우선 WBP_MissionSelect라는 Widget 블루프린트를 하나 만든다.

 

Text와 Scroll Box를 배치한다.

 

Fade in 연출

화면에 꽉 차는 검은 이미지를 만든다.
애니메이션을 추가한다.
렌더 오파시티와 비저빌리티에 애니메이션을 추가한다.
비저빌리티는 Visible->Non Hit-Testable(Self Only)로 변경한다.

 

렌더 오퍼시티는 1.0->0으로 적용한다.
애니메이션 길이는 0.5초로 설정한다.
Event Construct에서 Play Animation에 Intro를 연결한다.

 

 

버튼에 MissionData 넣기

새로운 위젯 WBP_MissionEntry를 만들어 버튼과 텍스트만 넣어둔다.

Text이름은 MissionName으로 만들어서 변수 여부에 체크한다.
이벤트 그래프에서 MissionData형식 노드를 만들어 SetText로 넣어준다.

 

MissionSelect 위젯에서는 MissionList 변수를 만들고 for Each Loop로 Create Widget(WBP_MissionEntry)->각 MissionData에 대한 AddChild를 실행한다.

 

MissionList는 배열 타입으로 만들고 만들어져 있는 데이터 에셋을 넣으면 된다.

 

데이터 에셋

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

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "UI/LA_GameType.h"
#include "LA_MissionDataAsset.generated.h"

class ULA_MissionLogic;

UCLASS()
class LASTARTEMIS_API ULA_MissionDataAsset : public UDataAsset
{
	GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Mission")
    FText MissionName;

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Mission", meta = (MultiLine = true))
    FText MissionDescription;

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Mission")
    FName LevelName;

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Mission")
    ELA_MissionType MissionType = ELA_MissionType::None;

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Mission")
    TSubclassOf<ULA_MissionLogic> MissionLogicClass;
};

 

호버 시 상세내용 출력

WBP_MissionEntry에서 만든 버튼 변수 여부에 체크하고, 호버 이벤트를 추가한다.
WBP_MissionEntry에서 이벤트 디스패처 OnMissionHovered를 만들고, Call 함수를 호버 이벤트에 연결한다.
이벤트 디스패처에는 입력값으로 MissionData 오브젝트 레퍼런스를 추가하고, MissionData를 넣어준다.
MissionSelect 이벤트 그래프에서 Bind Event로 On Mission Hovered 노드를 생성한 뒤, Add Child의 Return Value를 연결한다. Event는 커스텀 이벤트를 만들어서 SetText를 실행하도록 한다.

팝업창 만들기

WBP_ConfirmPopUp이라는 위젯 블루프린트를 생성한다.
계층 구조에서 모든 Text의 변수 여부에 체크해준다.

 

안내 텍스트의 윗부분은 MissionData 변수를 만들어 임무명을 넣어준다.

 

MissionData 변수는 입력으로 받기 위해 인스턴스 편집 가능, 스폰시 노출 체크를 해줘야한다.
MissionEntry의 OnClicked 이벤트에 MissionData가 입력값인 이벤트 디스패처를 연걸하고, MissionData를 넣어준다.

 

 

WBP_MissionSelect 이벤트 그래프에 On Mission Selected가 실행되면 발생할 커스텀 이벤트를 Bind 노드로 설정해준다. Viewport에 MissionData로 팝업창을 띄우게 된다.
데이터 에셋에 포함된 레벨명으로 미션 수행할지 묻는 창에서 Yes를 클릭하면 창을 없애고, Input Mode를 Game Only로 바꾸고 마우스 표시를 없애고 나서 Open Level by Name을 실행한다. No를 선택하면 창을 닫는다.