2017/03/19
こんばんは。
あそです。
ブログを書いてませんでしたね……。
アプリ化作業に追われ、ようやくコエヲタヨリニ。のAndroid版を出すことが
できました!!

↑ダウンロードは無料なので、ぜひぜひDLしてください↑
※iOS版は審査待ちから動いてくれません……。
すみません、もう少々お待ちください。
さて、コエヲタヨリニ。ですが、RPGツクールMVで製作しています。
ツクール初のマルチプラットフォーム対応で、スマホにも出力可能ということで、
期待も大きかったのですが、
「RPGツクールMVではスマホアプリにするための下準備ができる」
ぐらいで考えておいた方が良いかなと思いました。
ゲーム自体はRPGツクールMVで作れますが、
そこからAndroidやiPhoneアプリにしようと思うと、結構な作業があります。
作業に当たってはcretia studio様のブログをかなり参考にさせていただきました。
http://studio.cretia.net/↑サイトはこちら↑
特に困ったのはAndroidアプリ化についてでした。
下記に記載していきたいと思います。
私はプログラミング等の知識はほぼ無いので、
説明が間違っている場合もあるかもしれません。
その際にはご指摘等いただけると幸いです。
AndroidはOSのバージョンや機種ごと、
はたまたAndroid5.0から実装されている「AndroidシステムのWebView」によって
挙動がかなり変わってきます。
私がRPGツクールMVで製作したゲームをAndroid化するにあたって
試した手法は次の3通りです。
※ツクールのバージョンは1.3.5です。
■RPGツクールMV公式通りのやり方(Python版のCrosswalk10)
■Cordova+Crosswalk23
■Cordoba+AndroidのWebView56
以上の3通りです。
このやり方にはそれぞれメリット・デメリットがありました。
まず、
■RPGツクールMV公式通りのやり方(Python版のCrosswalk10)
ですが、
全体的に少し重たくなります。
(画像処理及びBGMやSE等)
BGMは1秒ぐらいの遅延が発生したりするので、
イベントによっては、「ここからBGMを鳴らして盛り上げるぜ!」という時に
BGMが後から流れてくる情けないことになってしまいます。
また、広告を入れたり、スマホ自体のネイティブな機能を使うのは
かなり難しそうです。
(詳しく調べてないので、できるかできないか分かりません)
ただ、動作的には少々重たいものの、安定はまだしてるほうだと思います。
というのもCrosswalkというWEBブラウザエンジンを同梱してアプリ化するので、
どのスマホでも同じ動きをしてくれる。というのがメリットだそうなので、
安定してくるのかなと思います。
AndroidOSも4.0から対応してるようです。
※ツクールMVはAndroidOS4.4から対応としています。
■Cordova+Crosswalk23
これめっちゃ苦戦しました…。
Cordovaはモバイルアプリケーションのフレームワークだそうで、
Androidアプリ化するための手法の1つのようです。
Cordova自体にWEBブラウザ機能は無いので、
スマホ本来のWEBブラウザ機能を使うか、他のWEBブラウザ機能を同梱して
アプリ化するかになります。
ここでは、Crosswalkを同梱してアプリ化しました。
が、CordovaのCrosswalkはバージョンがいくつも存在していて、
バージョンによって挙動が変わります。
最新版は23になります。
昔のバージョンで安定したのがあるようなのですが、
現在はAndroidのセキュリティの関係上、19以上のバージョンしか入れることが
できないようです。
(海外のフォーラムを漁って得た情報なので、真偽は分かりません。
もしかしたら入れる方法があるのかもしれませんが、
私は見つけることが出来ませんでした)
そして、このCorsswalkのバージョンによる挙動ですが、
まず19~22までのバージョンは音が鳴りません。
webaudioにバグがあるとか何とかで、まったく音が鳴ってくれません。
なので、音を使うゲームに関しては最新版の23しか入れることが
できないんですね。
18以下のバージョンでは音が鳴るようなのですが、
cordovaに蹴られて入れられませんでした。
で、この23のバージョンも問題があります。
それは、アプリがバックグラウンドにいっても音が鳴り止まないことです。
ユーザーがプレイしている間、BGMが鳴っているとします。
「ちょっと休憩しようかな」
「人が来たからちょっと中止しよう」
として、ホームボタンや電源キーを押してスマホをスリープ状態にしたとしても、
BGMが鳴り止まないのです。
これは結構致命的な問題かと思います。
どうもvisibilitychangeが発火してないくさいです。
Cordovaの機能で
document.addEventListener("pause", onPause, false);
document.addEventListener("resume", onResume, false);
を実装すれば、効いてくれたのですが、
まれに失敗することがあり、信頼性に欠けました。
あと、BGMの遅延がひどいです。
2~3秒ぐらいのラグはある気がします。
その他は安定していて、Android4.0等からでも動くので、
このオーディオ周りの不具合を直すことが出来れば、
一番良い選択肢なのですが……。
ちなみにCrosswalkの開発は23で終わりらしいので、
もう改善されることは無いのかもしれません。
■Cordoba+AndroidのWebView56
今回、コエヲタヨリニ。はこれを採用しました。
Cordovaでアプリ化しますが、WEBブラウザの機能は、
ユーザーのスマホに入っているもの(WebView)を使用します。
が、このWebViewですが、バージョンによって動作が変わります。
最新版は56になります。
ユーザーがWebViewをアップデートしているかどうかは、そのユーザー次第です。
それで挙動が変わってしまうのです。
色々なバージョンを試してみたのですが、
46ぐらいまでであれば、まぁまぁ大丈夫な動きをします。
※46で大体1年半ぐらい前のバージョンっぽいです。
しかし、それ以前のものになってくるとBGMの遅延や
ホーム画面に戻ってもBGMが止まらない。広告が出ない等の不具合が出てきます。
最新版の56であれば、BGMの遅延もほぼなく、安定しているのですが、
ユーザーが最新版にしてくれているとは限りません。
なので、自分のスマホのバージョンを46まで落とし、46でも動作するようにしました。
それが、ゲームを始めた瞬間に行われる「ロード」の正体です。
Webviewが56の最新版であれば、BGMの遅延はほぼ無いので、事前のロードは必要ないのですが、
WebViewが古いバージョンの人のために、ゲーム開始時にBGMをプリロードするように
しています。
が、最新版の56であれば問題ないのかというと、そうでもありませんでした。
WebViewの最新版である56では、タッチの挙動が変わったようで、
1回タッチすると、何回もタッチしたという結果が返ってきてしまいます。
RPGツクールMV上では、タッチしただけなのにメニュー画面が開いたり、
セーブしようとすると連続タッチされて、ファイル1しか選べ無かったりと、
まともにプレイできる状態ではありませんでした。
これは、コアスクリプトの
document.addEventListener('touchstart', this._onTouchStart.bind(this));
となっている箇所を
document.addEventListener('touchstart', this._onTouchStart.bind(this), {passive: false});
とすることで解決しました。
同じような症状をお持ちの方はお試しください。
たぶんchromeでプレイする場合も同じ症状が出るんじゃないでしょうか。
これで、一番安定するものを見つけることができたのですが、
この手法はAndroid5.0以上しか対応していません。
WebViewはAndroid5.0から現れたものなので、それ以前のものは
OSの中に入っているwebkitを使うようなのですが、
それがwebaudioには対応していないので、音が鳴りません。
できれば、Android4.4何かにも対応させたかったのですが、
私の技術と頭ではこれが限界でした。
まとめになりますが、
■RPGツクールMV公式通りのやり方(Python版のCrosswalk)
一番無難な選択肢だが、広告を入れたりするのが難しい
■Cordova+Crosswalk23
オーディオ周りの不具合が何とかできれば一番いいんだけど…
■Cordoba+AndroidのWebView
ユーザーがWebViewを最新版の56にしてればパフォーマンス最高!
でも、Android5.0以上しか対応できない。
ちなみに、crosswalkにするとパフォーマンスが向上するという記事が検索すると出てきますが、
昔の話のようです。
下記はBGM4曲のプリロードタイムを計測したものですが、
●cordova+crosswalk23
18秒
●cordova+webview56
6秒
と3倍の差が出ました。
てな感じでした。
知識も無い素人の書いたものなので、誤り等あるかもしれません。
その際にはご指摘やアドバイスをいただけるとうれしいです!
最後に、このアプリですが、
トリアコンタン様のピクチャのボタン化プラグインが
大活躍してます!たぶんこのプラグインが無かったら作れてなかった……。