구현 목표 이전 편들에서 아쉬운 점이 하나 있었습니다. 바로 결과를 출력하는 방식이 아쉬웠는데요. 에디터 화면에 메시지를 띄우거나 로그 콘솔에 남기는 방식을 사용했습니다. 이는 멋있지 않아요. 그렇죠? 그래서 좀 더 알림 창 같은 알림창을 만들어보도록 하겠습니다.
구현 과정 1) 정의 들어가며 오늘은 최종적으로 2가지 형태의 알림 창을 만들 예정입니다. 두 내용다 어렵지 않아서 쉽게 구현할 수 있을거에요.
FMessageDialog
FMessageDialog 공식문서
이 클래스는 대화상자를 실행하는 클래스입니다. 대화상자는 사진과 같이 기본 형의 대화상자가 있고 사용자의 입력을 받을 수 있는 입력형 대화상자가 있습니다.
파라미터를 통해 원하는 모습을 자유롭게 구현할 수 있기때문에 각자 원하는 형태로 출력해보도록 해요.
Notification
Notifications 공식문서 FSlateNotificationManager 공식문서
언리얼에서 제공하는 여러 형태의 노티피케이션
노티피케이션(이하 노티) 기능은 위 사진과 같이 에디터의 우측 하단에 출력되며, 다이얼로그와 마찬가지로 여러 형태를 지원하기 때문에 자신이 원하는 노티를 생성할 수 있어요. 노티는 리스트를 작성하고 노티 매니저를 통해 출력하는 형태라는 점을 기억해주세요.
2) 분석 MessageDialog 1 2 3 4 5 6 if (NumOfAssets <= 0 ){ const FText MessageTitle = FText::FromString (TEXT ("경고" )); FMessageDialog::Open (EAppMsgType::Ok, FText::FromString (TEXT ("유효한 값을 입력해주세요." )), MessageTitle); return ; }
FMessageDialog는 Open() 메서드를 통해 생성할 수 있습니다.
총 3가지의 파라미터를 가지며 앞에서 부터 타입
, 내용
, 타이틀
순입니다.
메시지 타입에는 여러가지가 있으면 한번 살펴보는 것을 추천드려요.
Notify 1 2 3 4 5 6 7 if (Counter > 0 ){ FNotificationInfo NotifyInfo (FText::FromString(FString::FromInt(Counter) + TEXT("개의 파일이 복제되었습니다." ))) ; NotifyInfo.FadeOutDuration = 7.f ; FSlateNotificationManager::Get ().AddNotification (NotifyInfo); }
FNotificationInfo 형태의 노티를 생성합니다.
노티의 형태 역시 여러가지가 있으므로 하나씩 살펴 보시는 것을 추천드려요.
이후 노티매니저에 노티를 추가하면됩니다.
노티 매니저는 싱글톤으로 구현되어 있어며, 가지고 있는 노티를 윈도우에 플로팅 해줍니다.
최종코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 void UQuickAssetAction::DuplicateAssets (int32 NumOfAssets) { if (NumOfAssets <= 0 ) { const FText MessageTitle = FText::FromString (TEXT ("경고" )); FMessageDialog::Open (EAppMsgType::Ok, FText::FromString (TEXT ("유효한 값을 입력해주세요." )), MessageTitle); return ; } TArray<FAssetData> SelectedAssetData = UEditorUtilityLibrary::GetSelectedAssetData (); uint32 Counter = 0 ; for (const FAssetData& AssetData : SelectedAssetData) { for (int i = 0 ; i < NumOfAssets; ++i) { const FString SourceAssetPath = AssetData.GetObjectPathString (); const FString NewDuplicateAssetName = AssetData.AssetName.ToString () + TEXT ("_" ) + FString::FromInt (i + 1 ); const FString NewPathName = FPaths::Combine (AssetData.PackagePath.ToString (), NewDuplicateAssetName); if (UEditorAssetLibrary::DuplicateAsset (SourceAssetPath, NewPathName)) { UEditorAssetLibrary::SaveAsset (NewPathName, false ); ++Counter; } } } if (Counter > 0 ) { FNotificationInfo NotifyInfo (FText::FromString(FString::FromInt(Counter) + TEXT("개의 파일이 복제되었습니다." ))) ; NotifyInfo.FadeOutDuration = 7.f ; FSlateNotificationManager::Get ().AddNotification (NotifyInfo); } }
3) 예시
마무리 각각의 출력 방식 마다 장단점이 있겠지만, 대화상자와 알림창은 편리하면서도 멋지게 알림 내역을 보여줄 수 있었던 것 같아요. 각자 편리하고 원하는 방식을 이용해서 출력해보도록 합시다. 감사합니다. 다음 편에는 더 재밌고 유용한 글을 써보겠습니다. 그럼 다음 게시글에서 뵙겠습니다.