スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

RPGツクールMVでのAndroidアプリ化のこととか

こんばんは。
あそです。

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

koetayo_banar.png

↑ダウンロードは無料なので、ぜひぜひ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倍の差が出ました。

てな感じでした。
知識も無い素人の書いたものなので、誤り等あるかもしれません。
その際にはご指摘やアドバイスをいただけるとうれしいです!

最後に、このアプリですが、トリアコンタン様のピクチャのボタン化プラグイン
大活躍してます!たぶんこのプラグインが無かったら作れてなかった……。



スポンサーサイト

コメント

非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。