Unreal Engine 4

[Android] Toast 호출 하기 #2

브랑제리 2021. 4. 15. 18:48

이번 기록은 워밍업 작업으로 UPL 작성 과 플랫폼별 코드를 작성하여 안드로이드의 Native 코드를 

호출 하는 튜토리얼입니다.

 

토스트는 간략하게 설명을 한다면 

developer.android.com/guide/topics/ui/notifiers/toasts?hl=ko

 

토스트 메시지 개요  |  Android 개발자  |  Android Developers

토스트 메시지는 작은 팝업으로 작업에 관한 간단한 피드백을 제공합니다. 메시지에 필요한 공간만 차지하며 진행 중인 활동은 그대로 표시되고 상호작용도 유지됩니다. 토스트 메시지는 시간

developer.android.com

toast 메시지

처럼 안내메세지를 노출할 수 있는 기능입니다.

 

Toast 생성 코드는 Java 영역에서 구현을 하고 

C++ 및 UPL로 UE4에서 Java 영역에 대한 호출 및 BP Library를 통해서 BP에서 쓸 수 있도록 구현을 합니다.

 

이 기능을 완료하면 앞으로 Admob 및 3rd party는 복붙 수준의 구현 난이도일 것입니다.

# 플랫폼별 코드 구현

MobileHelper에 클래스 추가

MobileHelper 플러그인에 새로운 c++클래스를 추가할 것입니다.

클래스 마법사를 실행하여 플랫폼별( Android, iOS) 코드를 작성할 것입니다.

 

마법사로 클래스 추가

'없음' 으로 선택하고 '다음'을 선택합니다.

 

클래스 생성생성

이름 : AndroidHelper

경로 : Android 폴더를 추가합니다.

'클래스 생성' 을 선택합니다.

 

AndroidHelper.h

1
2
3
4
5
6
7
8
9
class AndroidHelper : public IPlatformInterface
{
public:
    AndroidHelper();
    virtual ~AndroidHelper();
 
    virtual void ShowToast(const FString& Msg) override;
};
 
cs

ShowToast(...) : Jni를 통해 Android Toast를 호출 합니다.

 

AndroidHelper.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "MobileHelper.h"
 
#define LOCTEXT_NAMESPACE "FMobileHelperModule"
 
void FMobileHelperModule::StartupModule()
{
#if PLATFORM_ANDROID
    PlatformPtr = MakeShareable(new AndroidHelper());
#endif
}
 
void FMobileHelperModule::ShutdownModule()
{
    // This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,
    // we call this function before unloading the module.
    
}
 
#undef LOCTEXT_NAMESPACE
    
IMPLEMENT_MODULE(FMobileHelperModule, MobileHelper)
cs

 

Interfaces/PlatformInterface.h

1
2
3
4
5
class IPlatformInterface
{
public:
    virtual void ShowToast(const FString& Msg) = 0;
};
cs

 

MobileHelperBPLibrary.cpp

1
2
3
4
5
6
7
8
void UMobileHelperBPLibrary::ShowToastMessage(const FString& Msg)
{
#if PLATFORM_ANDROID
    FMobileHelperModule::Get().GetPlatform()->ShowToast(Msg);
#else
    GEngine->AddOnScreenDebugMessage(-15.f, FColor::Red, Msg);
#endif
}
cs

 

# UPL 구현

docs.unrealengine.com/ko/SharingAndReleasing/Mobile/Android/AndroidConfigRulesSystem/index.html

 

Android 구성 규칙 시스템

UE4 프로젝트의 Android Configuration Rules, 구성 규칙 시스템 사용법을 안내합니다.

docs.unrealengine.com

MobileHelper_UPL_Android.xml

 

Plugin 폴더에 'MobileHelper_UPL_Android.xml' UPL xml 파일을 생성합니다.

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
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:android="http://schemas.android.com/apk/res/android">
  <gameActivityImportAdditions>
    <insert>
    import android.widget.Toast;
  </insert>
  </gameActivityImportAdditions>
 
  <androidManifestUpdates>
  <!--  -->
  </androidManifestUpdates>
 
  <gameActivityClassAdditions>
    <insert>
    public void showToast(final String msg)
    {
      runOnUiThread(new Runnable() {
        public void run() {
          Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
        }
      });
    }
  </insert>
  </gameActivityClassAdditions>
</root>
cs

위의 내용을 복사&붙혀넣기를 합니다.

 

gameActivityImportAdditions : Toast에 필요한 임포트 할 코드를 넣습니다.

gameActivityClassAdditions : java 구현 코드를 넣습니다.


# BP 에서 호출하기

 

BP에서 호출

 

# Android 에서 테스트

toast 호출

# iOS는?

iOS는 테스트 기기도 없고.. 개발자 프로그램 가입할 돈도 없고.. 

 

코드 구현은 비슷해서 추후 구현.

 

# Github

github.com/siyanbae/UE4_MobileHelper.git

 

siyanbae/UE4_MobileHelper

Mobile Helper plugin. Contribute to siyanbae/UE4_MobileHelper development by creating an account on GitHub.

github.com

자세한 구현 코드는 해당 github에 있습니다.

 

# 참고 자료

github.com/AppsFlyerSDK/appsflyer-unreal-plugin

 

AppsFlyerSDK/appsflyer-unreal-plugin

AppsFlyer SDK for Unreal Engine 4. Contribute to AppsFlyerSDK/appsflyer-unreal-plugin development by creating an account on GitHub.

github.com

github.com/gameDNAstudio/MobileUtils

 

gameDNAstudio/MobileUtils

A plugin for Unreal Engine 4 that lets you integrate mobile utilities into your project. - gameDNAstudio/MobileUtils

github.com

qiita.com/shiena/items/fe0e4cc1de4ddbaa60f0

 

Unreal Plugin Language リファレンス - Qiita

はじめに UE4でAndroid向けのプラグインを作るときにサードパーティのライブラリを追加したり設定ファイルを変更したいことがあります。 プラグインを組み込んだプロジェクトでそんな変更

qiita.com

UE4 Adversiting Plugins

반응형