読者です 読者をやめる 読者になる 読者になる

451 Unavailable For Legal Reasons

とあるゲームエンジニアのブログです

スーパーマリオランで使われている技術を権利表記から確認してみる

Super Mario Run

Super Mario Run

  • Nintendo Co., Ltd.
  • ゲーム
  • 無料

スーパーマリオラン出ましたね。 「メニュー」→「せってい」→「このアプリについて」の中にある「権利表記」の内容から使われている技術を確認していきたいと思います。

UniRx

f:id:master-0717:20161216103503p:plain

github.com

UniRxはReactive ExtensionsをUnityで使えるように再実装されたライブラリです。仕事でUnityを使う時にはいつもお世話になっています。 UniRx作者本人のブログ記事が一番詳しいと思うので、時系列で紹介します。

2014/08/23

neue cc - A Beginners Guide to Reactive Extensions with UniRx

2014/09/08

neue cc - Immutable CollectionsとSubject(Rx)の高速化について

2014/12/18

neue cc - Unityのコルーチンの分解、或いはUniRxのMainThreadDispatcherについて

2015/04/13

neue cc - UniRx 4.8 - 軽量イベントフックとuGUI連携によるデータバインディング

2015/05/11

neue cc - UniRxでの空呼び出し検出、或いはRoslynによるCode Aware Libraries時代の到来について

2015/06/20

neue cc - 第一回UniRx勉強会を開催しました+スライドまとめ

2015/10/23

neue cc - 同期(風)コードと対比させたUnity+UniRxで非同期を扱う場合のパターン集

2015/12/21

neue cc - UniRx 5.0 - 完全書き直しによるパフォーマンス向上とヒューマンリーダブルなスタックトレース生成

2016/01/06

neue cc - Unityでのボクシングの殺し方、或いはラムダ式における見えないnewの見極め方

2016/05/14

neue cc - Unityにおけるコルーチンの省メモリと高速化について、或いはUniRx 5.3.0でのその反映

2016/08/03

neue cc - UniRx 5.4.0 - Unity 5.4対応とまだまだ最適化

2016/10/05

neue cc - UnityのMonoアップグレードによるasync/awaitを更にUniRxで対応させる

FlatBuffers

f:id:master-0717:20161216103512p:plain

github.com

FlatBuffersについてはDocumentationのOverviewをGoogle翻訳すると下記の通りです。

FlatBuffersは、C ++、C#、C、Go、Java、JavaScript、PHP、およびPython用の効率的なクロスプラットフォームシリアライズライブラリです。 もともとは、ゲーム開発やその他のパフォーマンス重視のアプリケーション向けにGoogleで作成されたものです。

FlatBuffersはデシリアライズのパフォーマンスに特化したシリアライザで、なぜ高速にデシリアライズできるのかというと、定義されたスキーマに則ってシリアライズしたバイト配列をオブジェクトへのアクセス時にそのまま利用する実装になっているからです。

UniRx作者がFlatBuffersにインスパイアされてZeroFormatterというシリアライザを作成公開しています。

github.com

ZeroFormatterもデシリアライズのパフォーマンスに特化したシリアライザで、シリアライズしたバイト配列をオブジェクトへのアクセス時にそのまま利用するところはFlatBuffersと同様ですが、C#のクラス定義をそのままスキーマ定義として利用できるようになっています。 なので例えばC#(UnityやUWP等)で作成したゲーム内でクライアントが頻繁に通信をする場合などにFlatBuffersよりも楽に使えます。

ちなみにC#で使えるシリアライザのパフォーマンス比較結果がZeroFormatterリポジトリのREADMEにあります。

https://github.com/neuecc/ZeroFormatter#performance

OpenSSL

f:id:master-0717:20161216103519p:plain

https://www.openssl.org/

OpenSSLはTLSおよびSSLプロトコル用のライブラリです。Facebook SDK for Unityが依存しているので入っているのではないでしょうか。

iOS Native Code Samples

f:id:master-0717:20161216103526p:plain

bitbucket.org

iOS Native Code SamplesはUnity開発元のUnity Technologies社が公開しているサンプルコードです。

MiniJson

f:id:master-0717:20161216103547p:plain

Unity3D: MiniJSON Decodes and encodes simple JSON strings. Not intended for use with massive JSON strings, probably < 32k preferred. Handy for parsing JSON from inside Unity3d. · GitHub

MiniJsonはJSONシリアライザです。勝手な予想ですが、FlatBuffersは対戦などリアルタイム通信系のシリアライズ・デシリアライズが頻繁に行われる箇所に、JSONはAPIとのHTTPS通信等たまにシリアライズ・デシリアライズが行われる箇所に使用されていたりするのではないでしょうか?

Facebook SDK for Unity

f:id:master-0717:20161216103602p:plain

developers.facebook.com

Facebook SDK for UnityはFacebookログイン、Facebookへのシェア、Facebookの友人とデータ共有(ランキングとか)などをUnityで開発するアプリで利用するためのライブラリです。

adjust SDK for Unity

f:id:master-0717:20161216103618p:plain

docs.adjust.com

adjust SDK for Unityは、売上、セッション数、インストール数などのKPIを収集して可視化したり、広告の効果測定を行うためのadjustというサービスを利用するためのライブラリです。

Firebase-Unity

f:id:master-0717:20161216103631p:plain

firebase.google.com

Firebase-Unityは、Push通知、クライアント・サーバー間やクライアント同士のデータ同期、分析、テスト、クラッシュレポート等のモバイルアプリの開発・運用で必要になる技術をサービスとして提供するFirebaseというmBaaSを利用するためのライブラリです。

総括

FlatBuffersを使っていてパフォーマンスを強く意識している感じがします。Firebaseを使っていてサーバー側はマネージドなサービスで運用できている感じもしますね。ゲームあるところにObserverパターンありといった感じで、一度独自Observerパターンの代わりにUniRxを使ったらもう戻れないぐらい便利なので、UniRxは多くのUnity開発者にとって手放せないライブラリになってきているのではないでしょうか。現場からは以上です。