おばけスキャンを少し修正しました


おばけスキャンを少し修正して、おばけを昇天させると貰える情報に画像を表示するようにしました。画面では九字の札を貰った時のものです。

ウィジットにimgを入れています。(すいません。雨降ってるので家の中デバッグで…)
こんな感じのコードで

imgを配置して配列を入れ替えています。

「おばけスキャン」リリースしました。

「おばけスキャン」リリースしました。

Androidアプリです。
開発はNexus5Xで行ったんですが、サポートされていないみたいでGooglePlayからダウンロードできません。

でもNexus5Xで開発しましたので動確取れています。なのでNexus5Xの方は以下からDLしてadbでインストールしてください。
apkインストール方法はこちらから

Nexus5X用apkファイルのダウンロード

その他の方はこちらで確認ください
対応機種一覧CSV


家の中でも遊べます。


養老渓谷駅前に宝箱を配置したGPSAR。


メインメニュー。GPSをOFFにもできますがそれでは宝箱探しが楽しめません。


新しく追加した芳一の札:使うと一定時間おばけから見えなくなりますので昇天し放題!


昇天したおばけがお礼にくれる古びた鍵。これがないと宝箱をみつけても開けられません。


こんな感じで位が上がっていきます。


九字の札の説明。


鎮守の杜


龍神社。


参拝すると龍神が何かくれたりします。

多分バグが結構あると思うので見つけたら(コメントで)教えてください。
結構おもろいと思うんだけどなあ…ダメ?

GPSとARを組み合わせて宝探し的なゲームを「おばけスキャン」でやってみる

AndroidのGPS情報を得て指定の座標付近にARオブジェクトを出現させる実装方法を解説します。

なのでここでは宝箱を発見するようにします。では置く場所の緯度経度を取ります。ここでは長柄ダムのぼうぼうラーメン(閉店)至近にします。

いろいろな場所に配置する予定なのでVectorの配列を作っておきます。

で、LocationServiceの初期化をしてARCoreの初期化もしときます

で、GPSを取得して現在地と配置配列を確認する部位とTickでARスポーンする部位に分けて処理をします。

GPS部では[イベントBeginPlay]でGPS情報を取得してGPS配列を回して比較しています。5秒おきにGPS情報をBestで得てGPS位置を配列化した変数を得るたびにLoopして比較しています

Distanceの0.0001は誤差約15mに設定しています。0の方が正確なんですが万が一0が取れなかった事を考えての保険です。

で、GPS配列のどれかに近づいたらSpawnedブーリアンをTRUEにします。GPS部はこれでおしまいです。

次はARスポーン部です

SpawnedブーリアンがTRUEになったら走ります。が、何度も処理しないようにSpawnedブーリアンは直後にFALSEにしときます。で、空間の認識処理でTransformをGetしてActorをSpawnします。(この処理も認識されたものは配列になるので認識できた場所分だけSpawnしないようにSpawnは最初の一回だけにしておきます。)

SpawnされたActorは用が済んだらDestroyするのをお忘れなく。

長柄ダムのぼうぼうラーメンのほぼGPSで設定した位置に表示しました。こんな感じでActorが表示されます。でも演出を忘れずに!

他に「市原湖畔美術館」

月崎駅(2mくらいズレてる)

養老渓谷駅

設定した緯度・経度にいくとこのように宝箱が出現します

これは現在配信中の「おばけスキャン」で実装しますので実装はこちらで確認ください。

ここまでのアプリを試す場合はこちらからDLできます。(337MB)
宝箱は上記に加え、鋸山大仏前・JR鎌取駅周辺にも配置しています。

おばけを昇天させると稀にお礼として古びた鍵をもらえる。特定の地点で豪華で古びた長持を発見する。鍵を持っていると開けて九字の札、芳一の札、般若の面、仏の心、邂逅の記憶などのアイテムが取得できる。

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クリックして実機にインストールしてみるとインストールされる。

追記:ビルド時にログを非表示にするとエラーが出ないのでクラッシュしない。ログを見ると日本語のところが文字化けしているようで、これが表示されるとクラッシュしちゃうみたい。