これから、数回の渡り、アプリ開発で得たLuaの知見を共有していく。
今回は、Luaの話以前に、スマートフォンアプリで、バイナリを更新せずアプリの振舞を変えるという事を考える時に必要な思考を記載していく。
〇アプリ配布という制約
ご存知の通り、スマートフォン向けのアプリは、WEBブラウザのサービスを実行するアプリでもない限り、大体はバイナリファイル内部で処理が完結するように作られている。
そして、スマートフォンアプリにバイナリをインストールして実行してもらうという以上、一度配布してしまったバイナリに機能を増やしたければ、バイナリを再配布するしかない。
これが、「アプリ更新」とか言われる物だ。
つまり、アプリ更新無しで振舞を変えたいのであれば、それ以外の後から変更できる情報を模索する必要がある
〇考えられる、変更できる情報
ここはあまり難しくないかもしれない。皆さんも意識せず普通に使っているだろう。
サーバーからダウンロードしてきた、ローカルストレージに存在するテキストファイルかもしれないし、Unityであればアセットバンドルかもしれない。場合によっては、サーバーアクセスしたレスポンスのJson文字列その物かもしれない。
大事なのは、バイナリ更新が不可能なのであれば、バイナリがこの変更可能な情報を受け取る事が出来るという事だ。
つまり、アプリ更新無しでアプリの振舞を変えたいのであれば、この変更可能な情報を用いて、何かしなければならないという思考になる事だ。
〇では、この変更可能な情報をどう使う?
これを考える前に、ゲームとはどのような要素で成り立っているかを知る必要がある。
簡単に言えば
・入力
・更新
・出力
基本は、この3つで成り立っている。
〇入力
ユーザー操作の事である。タップ、フリック、スライドなどが該当する。イベント発生を検知するトリガーである。このイベントで、パラメータの変動が起こる。
〇更新
時間経過や外部の影響で発生するイベント検知のトリガーである。このイベントを検知した場合も、パラメータの変動が起こる。
〇出力
発生したイベントによって変更されたパラメータを元に、画面にその内容を反映する事である。「描画物の更新」か「情報の保存」しかないと思われる。
つまり、変更不可能なバイナリ側には、予め上記3つの要素に該当する機能を実装しておかないといけない。
〇最終的に必要な事
ここまで理解出来たら後は簡単で
・バイナリ側には「入力、更新、出力」で行いたい事を書いておく
・変更可能な情報には、バイナリ側の「入力、更新、出力」に対して必要な情報を持たせて、バイナリ側に渡す
・バイナリ側は、その渡された情報に従って、予め実装されている処理を実行する
基本的な考え方は以上である。
既視感がある人もいるだろう。
そう、アドベンチャーゲームのスクリプトと、それを解釈するスクリプトエンジンのような関係だ。
つまり、筆者はLuaを勧めてはいるが、バイナリの更新無しでアプリの振舞を変えようと思うのであれば、上記の条件を満たしていれば何でもいいのである。
ただ、この内容だとかなり抽象的過ぎると思うので、次回もう少し踏み込んで説明しようと思う。