AYU MAX

プログラミングとか作ったもの

UE4マーケットプレイスに出すプラグインのマルチプラットフォーム対応について

UE4プラグインのマルチプラットフォーム対応

今私がマーケットプレイスにだしているObjectDelivererというプラグインはWindowsのみをサポートしています。

最近利用者からのご要望で他のプラットフォームにも対応してほしいという声が数件きていたので、ちょっと重い腰を上げて調べてみました。

最終的なゲームのパッケージ時のマルチプラットフォーム対応は色んな記事が見つかったのですが、プラグインのパッケージ化についてはあまり情報がなく見つけるのに苦労しました。

ただし大部分はゲームのパッケージ方法と同じなので、いろんな情報をつなぎ合わせたところ何とかうまくいきそうなところまできました。

ここから先の情報は開発環境がWindowsを前提としています。

※ 最後に書きますがiOS向けのみ上手くいっていません。

環境の準備

まずはEngineのインストールオプションから、出力したいプラットフォームにチェックをつけて必要な機能をインストールします。

f:id:ayuma0913:20190505174905p:plain

次に追加で必要なソフトをインストールします。

Android

以下のインストーラーからAndroidの開発環境に必要なツールを一括でインストールします。

[UE4 Install Directory]\Engine\Extras\AndroidWorks\Win64\CodeWorksforAndroid-1R7u1-windows.exe

この情報は以下のリンクから詳細が確認できます。

Unreal Engine | 1. Android 向けゲーム開発に必要な設定

Linux

Linuxは公式サイトに必要なソフト(ツールチェーン)のインストーラのリンクがあるので、そこからとってきてインストールします。

ツールチェーンはEngineのバージョン毎に異なるので、パッケージしたいEngineの分だけインストールが必要です。

f:id:ayuma0913:20190505180159p:plain

以下のサイトにインストーラのリンクがあります。

(日本語のページだとEngineのバージョンが4.19までしかないので、英語ページのリンクをのせています)

Cross-Compiling for Linux

iOS

iOSはWindowsのマシンではビルドできないため、同一ネットワークにMacのマシンを用意してWindowsからリモートログインしてビルドする手法をとるようです。

そのためリモートログインの設定を行う必要があります。

通常のゲームのパッケージ化ですと、[ProjectSettings]-[Platforms]-[iOS]の[Build]に[Remote Build Options]があるので、そこにMacのマシン名とログインするユーザー名を入れれば設定は完了らしいです。

あとここでSSH のKeyの作成と登録もできます。

ただしプラグインのパッケージ化にはここの情報は使われず、Macにリモートアクセスしてくれません。

そこで色々試した結果[UE4 Install Directory]\Engine\Config\IOS\IOSEngine.iniに以下の記述を追加したところ、リモート接続しにいくようになりました。

[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
RemoteServerName=Macのマシン名
RSyncUsername=ログインユーザー名

プラグインのパッケージ化

そもそものプラグインのパッケージ化方法については以前の記事を参照ください。

www.ayumax.net

また、コマンドではなくEditorからの操作で作る場合は、PluginsウィンドウからもPackageできるようです。(最近知った) f:id:ayuma0913:20190505181419p:plain

この時に狙ったプラットフォームの出力を作るためには*.upluginファイルのWhitelistPlatformsにプラットフォーム名を書く必要があります。 (WhitelistPlatformsを使わずにコマンドライン引数でも指定できるようです)

以下のように書くとWindows(64bit, 32bit), Mac, Linux, iOS, Android, HTML5向けに出力されるらしいので、この設定でパッケージ化のコマンドをたたいてみます。

"WhitelistPlatforms": [
    "Win64",
    "Win32",
    "Mac",
    "Linux",
    "IOS",
    "Android",
    "HTML5"
]

パッケージ化の結果

上手くパッケージ化できているかは、コマンドの結果とプラグイン出力ディレクトリの\Intermediate\Build内を見て判断しました。

その結果以下のようになりました。

Platform 結果
Win64
Win32
Mac ×
Linux
iOS ×
Android
HTML5

結果としてMacとiOS以外は生成成功しました。

調べてみるとMacは現状Windowsからは作れないらしく、Mac向けはMac上にUE4をインストールしてそこから作るしか方法がないらしいです。

iOSは実はコマンドの途中でエラーがでて失敗してしまい、うまくいきませんでした。

エラーメッセージの内容からプロビジョニング関連だと思うのですが、まだちゃんとした解決策は見つかっていません。

正規の方法はおそらくUnreal Engine | 3. iOS プロビジョニング- 署名証明書の生成に書いてあるような手順でいくのだと思いますが、この手順はiOSのDeveloper登録を済ませていないと実現できなく別の方法がないか探しているところです。

ゲームのビルド時に絶対必要なのはわかるのですが、プラグインのビルドにもいるのかなあと個人的には思ってしまいます。

方法が見つからなかったら、おとなしくAppleにお布施を払って正規の方法でビルドしてみます。

もしお布施なしでプラグインのパッケージ化をする方法をご存知の方いらっしゃいましたら教えてください。

まとめ

iOSのみ上手くいっていませんが、UE4プラグインのマルチプラットフォーム対応のパッケージ化ができました。

ただ自分のプラグインは当面はWindowsのみサポートでいこうかと思っています。

マケプレに出したプラグインに何か問題があった時に、Windowsでしたら自分の知識で何とかできると思うのですが、他のプラットフォームはあまり経験がないのでちゃんとサポートする自信が現状ないためです。

Windows以外はサポートしないっていう縛りでだすのもありかなあと思いますが、もうしばらく考えてみます。