UE4でLAMP(Nginx)にアカウントを作ってログインし、データを保存してGETする

UE4でサーバーにログインする場合、そのままではできないのでC++でノードを作ってHTTP/HTTPSで通信するんですが、フリーのプラグインでこれを実現するものがあったのでこれを使って実装してみる。

VaRestって言うプラグイン。標準では入ってないのでこちらからDLする。

DLはEpicのランチャーが起動し、これからDLしてインストールする。インストールし終わったらEnabledにチェックを入れてUE4を再起動ボタンを押す

説明(英語)を読むとC++で構築する必要はなく、これだけでHTTP/HTTPS通信ができるとのこと。

それではこれでHTTP/HTTPS通信のテストをしてみます。

まず、サーバー側に次のphpファイルを用意します。

<?php
$user = "user";
$pass = "pass";
//this script path
$script_php=$_SERVER['SCRIPT_NAME'];
if ($_SERVER["REQUEST_METHOD"]=="POST"){
    if ($_POST['user']==$user && $_POST['pass']==$pass){
        echo $user."で、パスワード".$pass."にてログインしました\n";
    }
}else{
//テーブルタグ
echo ("
    <form method=\"POST\" action=\" $script_php \">
    <table cellpadding=\"4\" cellspacing=\"1\" border=\"0\" width=\"800\"
        align=\"center\" bgcolor=\"#336666\">
        <tbody>
            <tr>
            <td height=\"100\" valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\">
            USERを入力してください。<br><br>
            USER:<input type=\"text\" name=\"user\">
            <br><br>
            パスワード:<input type=\"password\" name=\"pass\">
            <br><input type=\"submit\" value=\"ログイン\">
            </td>
            </tr>
       </tbody>
    </table>
</form>
");
}

GETは簡単なので割愛します。まず、POSTが行われたらPOSTを検知してUSER名とパスワードを確認して正しければPOSTされたユーザー名とパスワードを出力します。
POSTされてないとフォームを出力しますがこれは動作確認用です。設置したらまずPCから動作確認しましょう。

post.phpという名前で設置しました。こんな感じで出力されます。

ではUE4側の処理です。Zキーを押すとPOSTされて出力をUE4で受け取る処理です。

まず、適当にProjectを作ってレベルBPで構築します。

こんな感じです。UE4.24.3+VaRestです。

解説

まず、VaRestプラグインをEnableにします。で、キーボードイベントでZキーイベントを置きます。で、ConstractJsonRequestを配置し、VerbをPOSTにして、ContentTypeをRequestBodyにしてRequestをサーバーに投げるようにします。

VaRestRequestJson型の変数を作ってそこにRequestを格納します。

OnRequestCompleteにイベントをバインドして変数からRequestObujectを取り出しアカウント情報をセットします。

最後にphpスクリプトにPOSTして呼びます。

Zキーを押すとサーバーにログインしてデータを受け取ります。

次はこれでログインしてアカウントの作成とアカウントがある場合はログインしてSQLからデータを得るものを作成しますね

UE4+Androidのパッケージ化

UE4+Androidのパッケージ化についてはいろいろ種類があり試してみたが

が良いみたい。

Multiがなんでも4使えていいと思ったが、GooglePlayConsoleさんに限定されるので良くないと警告を受ける。ATCも同じ。

ちなみにMultiにするとサイズが1.3倍くらいになるのでやめたほうがいいか。

Androidアプリ消費型課金アイテムの実装方法:UE4

Androidアプリに課金アイテムを実装する方法をUE4で示す。

①まず、UE4で開発するアプリに課金アイテムの実装をする。

LevelBP

ウィジット

  • drive:\yourprojectname\Config\Android\AndroidEngine.iniを開き以下を追加する
[OnlineSubsystem]
DefaultPlatformService=GooglePlay

[OnlineSubsystemGooglePlay.Store]
bSupportsInAppPurchasing=True
  • project settingsを開き以下を追加する

com.android.vending.BILLING

  • こちらを参照にKeyStoreを作成して配置し、ProjectSettingsに記載しておく

Google Play License KeyのところにGooglePlayConsoleの「開発ツール」>「サービスとAPI」のこのアプリのライセンス鍵をコピーして貼り付ける

Storeバージョンはプロジェクトを更新してGooglePlayコンソールにアップロードする際に必ず上げておく

例えば1でアップロードしたものを更新する場合は2にする
  • GooglePlayコンソールにログインしてアプリを登録する

☑のついた個所はすべて記載し、☑を有効にしておく

  • 課金を実装したapkをアップロードする
先にアプリで課金を実装しておかないとアイテムの作成ができないので注意

GooglePlayコンソールで「ストアでの表示」>「アプリ内サービス」で管理対象のアイテムで課金アイテムを作る

  • リリース管理>アプリのリリースでアルファ版をリリースする
リリースをユーザー限定にしてテストする:
ユーザーにテスターのアカウントを追加する
  • コンソールのトップに戻り、「設定」>アカウントの詳細で「テスト用のアクセス権がある Gmail アカウント」に先ほどのテスターアカウントを追加する
これを追加しないと有料のテストがそのまま有料になってしまうので注意

参照1 | 参照2 | 参照 | 参照 | 参照

ちなみに今は昔と違い審査があるのでアルファ版でも公開の前に審査があって時間がかかるようだ

UE4でAndroid開発ビルドでクラッシュ

UE4でAndroid開発あうると開発用端末のテストではうまくいくが、最終的にリリース版でビルドすると「SlateTextShaper.cpp」でクラッシュをする。
絶対にクラッシュする。

こんな感じで…

意味不明だがググってたどり着いたのはここ

どうやら日本語環境にエディタの設定をしていると文字化けしてクラッシュするバグのようだ。

英語環境だとクラッシュせず、日本語環境だと絶対クラッシュするとのこと。

なのでエディタは英語で使う。これならビルドできるようだ。

※クラッシュしてもAndroidアプリはビルドできている様子。出力先のフォルダにapkができているので試しにbatファイルをWクリックして実機にインストールしてみるとインストールされる。

UE4のデバッグ画面に表示される◎を消す

UE4の画面に◎のコントローラが表示されるんだけど

この下の◎二つ

うざいので消します。

参考

まず、「プロジェクト設定」を開いて

インプット>デフォルトのタッチインターファイスをクリック

表示オプションで「エンジンのコンテンツを表示」にチャックを入れてクリアします。

これで表示されなくなりますよ。おしまい。

UE4でARアプリを作ってみる

ではARアプリを作ります。UE4は4.24.3です。テストで用意した端末はNexus5Xです。

【仕様】

Android用ARCoreアプリ

フェーズ1

①アプリを起動して辺りをスキャン

②お化けがいたら反応する

③幻描の香を焚くとお化けが見える

④お化けがこちらに気が付く前にチャクラを開き九字を切る

⑤お化けが九字を切る前に気が付くと逃げられてしまう

⑤無事九字を切るとお化けが昇天する

⑥昇天すると徳が積まれる

⑦徳が積まれると天部から明王、菩薩、如来と階位が上がる

という感じでまずはARテストアプリを構築します。

【準備】

Android Studioをインストール

こちらを参考にプラグインとプロジェクト設定を行います。

必要なのは以下です

  1. プラグインでAndroid Cameraにチェックを入れます
  2. プラグインでARCoreとARCoreServiceにチェックを入れます
  3. プロジェクト設定>Androidで書き込み可能にします

デバックに使うAndroid端末を用意します。

端末とPCを接続してcmdから端末が見えるか確認します

見えたらUE4を起動し「Blank」を作成しモバイル、スケーラブル、コンテンツなしを選択しプロジェクトを作ります。

まず、レベルを作っておきましょう。

でレベルブループリントを開きます。

でこれだけで平面を認識できます。

で、認識した平面のスマホ画面をタップするとアクターをSpawnするようにします。プロジェクト設定のエンジン>インプットでアクションマッピングを追加します。

で、画面がタッチされたらイベントが発生しますのでそのイベントを受け取る処理を入れます。

認識した平面の範囲をタップされたらアクターをSpawnしますのでそのアクターも用意します。

アクターは以前作ったふわふわするお化けです。

お化けは常にカメラを向きますので今回はPlayerCameraManagerをターゲットにします。

また、今回はコリジョンでの判定ではなく距離判定にしてみます。こんな感じでカメラマネジャーがアクターに200cm以内に入ったらの処理を追加します。

200cm以内に入ったら一回だけスプライトを切り替え、アクターを廃棄します。

これでテストアプリの完成です。

アプリが起動したら、辺りをタップしてみましょう。お化けが見えます。でも200cm以内に入ったらお化けがビックリして、怒って逃げます。

    

このアプリはコチラからDLできます。

おばけは明かり0.4以下の識別範囲で出現します。

Nexus5をAndroid10で動かす

Android6で見捨てられたNexus5。でもまだまだ現役で使えるのでAndroid6で止めとくのはもったいない。
なのでNexus5を最新のAndroid10で動かすようにします。
※僕の場合はTWRPが再起動ループに入って2度チャレンジしましたがダメでしたので元に戻しました

【事前準備】

Android StudioをPCにインストールする

TWRPの最新版をDLする

カスタムROMのAndroid 10のROMをDLする

GAAPSもDLします

で、Nexus5の設定から「バックアップとリセット」

をタップして「データの初期化」をします。

※セキュリティのパスワードがONになっているとダメなのでセキュリティはOFFにします

初期化されるのでしばらくお待ちください。

※初期化されるのでデータのバックアップは取っておきます

初期化されたら起動して「開発者モード」の「USBデバッグ」をONにします。

PCとNexus5をUSBケーブルで繋ぐ。

adb devices

とcmdに打ち込み、PCからNexus5が見えるか確認する。

確認できたらNexus5をbootloaderでリブートする

adb reboot bootloader

で、bootloaderをアンロックする

fastboot oem unlock

lineage-16.0-20190926-UNOFFICIAL-hammerheadをflashします

fastboot flash recovery lineage-16.0-20190926-UNOFFICIAL-hammerhead.zip

これでTERPがインストールされたはずです。rebootします

fastboot reboot

これでTWRPの画面になるはずです

で、まず、Nexus5ROMのバックアップを取っておきます

crDroidAndroid-10.0-20200315-angler-v6.4をインストールして、

open_gapps-arm-10.0-pico-20200311をインストールすれば終わりです。

再起動します。Android10のNexus5が起動します。

※うまくいかなかったら元に戻せます。

こちらからNexus5のイメージをDLしときます。

DLしたら展開してflash-all.batを実行します。

これで元に戻ります。

でも、元に戻すのに時間がかかるのでもう一回チャレンジ。あきらめたらBootloaderをロックしなおすのをお忘れなく