zakobox iconざこ箱

- 適当に箱を壊したい人向け -

リリース: 2015年8月14日

アプリ 攻略 開発秘話

自問自答インタビュー

2015/10/13

一般編 開発編
最初に一言どうぞ!
2年前の2013年8月15日、Unityに初めて触れた日である。
エディタでのプレビューや様々な素材があるAsset Store、マルチプラットフォーム対応でC#による開発。Unity最高じゃないか、求めていたものだ。
しかし、何かをつくり上げる道のりは簡単ではなかった。まさに「あなたの夢、一緒に叶えようよ」の始まりである。
開発環境は?
Unity 5.1.2f1 Personal Edition。Unityとは最高のゲーム開発環境である。
PC環境は?
Mac mini 2011 (メモリ8GBに増設)。開発終盤は Windows自作PC にSSDも積んでチェンジ。
コードエディタ(IDE)は?
かわいい痛MonoDevelop。終盤は Xamarin Studio + Addin。WindowsのPCは無論 Visual Studio + VSTU
痛MonoDevelopで日本語入力時にフリーズがあったので、日本語はコピペでコーディングしてて長らく非効率だった。
主な実機テストは?
iPod touch 5のスペックで動作確認。他にiPhone 6 Plus、iPad 2。
Androidの実機テストは?
Android実機は持っていなかった…。開発序盤はエミュレータで、終盤に Galaxy Nexus、Zenfone 5などで確認した。
ゲームの処理重くてカクカクしない?
iPod touch 5でピーク時の処理は重かったが、iPhone 5以降なら許容と判断した(祈りに近い)。
古いAndroid端末も処理が重く、発熱の警告が連発する端末も…。対策して改善されているが、惜しみなく箱の演算やエフェクトを使ったせいか。
先行して開発したプラットフォームは?
iOSベースで開発した。Android実機を持っていなかったから/(^o^)\
次回作からはビルドが早くてパフォーマンスが出にくいAndroidを先行開発する。またUnity Cloud BuildやCI的なものを導入したい。
マルチタッチとフリックの実装はどうだった?
同時に組み込むことはオススメしない。入力操作のスピードが要求されるゲームだから余計に複雑になった。
当初はマルチタッチは未対応だったが、飛んでくる箱を2本指で破壊しようとする人がいたため、人の本能を妨げる仕様を抹消すべくマルチタッチに対応した。
バージョン管理は?
終盤にGitSourceTreeを導入。個人開発であろうと、もっと早く導入すべきだった。
それまでは、MacのTime Machineのファイル復元で何度か救われたことがある。主にシーンファイルが壊れたときや、実行するとフリーズして原因不明なときなど。
使用したアセットは?
AllSky

背景のSkyboxテクスチャ。晴天から夜空まで140種類がある。

Wood Crate

木箱のモデル。ざこ箱のベースモデル。

Crates Unlimited

鉄箱と黒箱のモデル。箱の種類を増やすために使用。

Fracturing & Destruction

でかい箱の破砕・分裂に使用。
メッシュ分割から破片の爆破、復元ができる。
破片の飛ばし方を制御したかったので、メッシュ分割のみ利用して爆破は自前実装した。

Universal Sound FX

破壊の効果音などに使用。3500以上のサウンドがあり、FPS向けの音が多い印象。

Xffect Editor Pro

エフェクト作成と再生管理。
たくさんのサンプルとテクスチャがあり、エディタ拡張でエフェクトを設定する。
エフェクトをプーリングしたり、カメラを振動させるスクリプトもある。

SoundManagerPro 3

サウンドの再生管理。
ピッチ調整、ランダム再生、同時再生数制御、ダッキングなどができる。

Google Universal Analytics

Google Analyticsによるアクセス解析。
デバイスのスペック情報や任意のイベント情報を送信できる。オフライン時に送信内容をキャッシュファイルに保存しておく機能もある。

Unity Ads

動画広告の表示用。実装がすごく楽。配信広告の種類がまだ少ないようだ。

Everyplay

プレイ動画録画と共有機能。動画のトリム、マイク録音もできる。録画処理はかなり低負荷。

NGUI 2.7 Free Version

GUIの作成と制御。テクスチャアトラス作成機能も活用した。

有料アセットは全てセール時に購入。SoundManagerProは$5で購入したが無料化にされている。
使用したプラグインやエディタ拡張は?
Google Mobile Ads Unity Plugin

AdMobバナー広告の表示用。

Social Connector

TwitterやLINEへのシェア機能。実装がすごく楽で重宝した。

GlobalGameManager

シングルトンなアクセスができるScriptableObject。インスペクタから値設定が可能。

ReferenceViewer

アセットの参照関係を表示するビューワー。アセットがどこで使われているのかを探せて便利。

TransformExtension

X座標のみ加算するなど便利な拡張メソッドがたくさんある。UNIBOOKの「Transformで拡張しておきたいメソッド」で限定公開されている。

NameCreator

タグ、レイヤー、シーン、インプット名を定数化したクラスを生成する。タイプセーフに扱えるようになる。

ConsoleTranslator

Ctrl + T (Command + T) でコンソールログを日本語に翻訳する。Unity Communityのサイト内検索も可能。英語の謎エラーのときに便利。

CreateScriptableObjectPrefub

ScriptableObjectを作成するにの使用。Projectビューでの右クリックから即作成できる。
Unity 5.1 からは CreateAssetMenuAttribute で作成できるようになっている。

XCode Editor for Unity

アプリ名のローカライズの設定自動化に使用。
その他のXcode上の設定は、Unity 5 から追加された UnityEditor.iOS.Xcode を使用した。

追加情報の表示や操作のショートカットなど、細かいエディタ拡張も使用した。
著作権とライセンス表記は?
アプリ内で何も表記していなかった。
アイコンなどは考慮していたが、フリーなプラグイン関連は全く考慮していなかった。
AssetStoreのものやエディタ拡張にとどまるものは良いとしても、アプリのバイナリに含まれるオープンソースコードもあるので、アプリ内で表示すべきだった。
カスタマイズしたアセットは?

Google Universal Analytics - オフラインキャッシュのセーブ機能

PlayerPrefsを使わずに、AES暗号化したバイナリファイルに保存するように変更。PlayerPrefsを隠蔽するような同名メソッドを定義したクラスを自前実装して置き換えた。PlayerPrefsはWindowsでレジストリに保存されるのが嫌である。

NGUI - ローカライズ機能

テキストファイルではなく、ScriptableObjectに文言を定義するように自前実装。

端末の言語に合わせてロードする。該当言語のファイルがない場合はEnglish。

NameCreator - LayerIndexの生成

LayerはNameよりIndexで扱うことが多いため、LayerIndexの生成も追加した。

その他 - 管理用のラッパークラスの作成

Xffect Editor Pro、SoundManagerPro 3、Everyplayなどはシングルトンな管理クラスがあったとしても、それをラッパーする独自のクラスを作成して使った。
uGUIは使わないのか?
少しだけ使った。開発当初はuGUIがリリースされる前のUnity 4.3.4であり、NGUIで作成済みだったのでuGUIに移行することを断念した。
開発中に困ったところは?
NGUIで文字表示が頻繁におかしくなった。ダイナミックフォントの異常が原因のようだったので、使う文字を画面外のLabelにあらかじめ表示しておくような対策でやり過ごした。
アイコンや画像はどうした?
Asset Storeの無料素材。Public Domainの無料素材。それらの加工と簡単な自作をした。
クレジット表記前提なら色々な無料素材を使っても良いと思う。
エフェクトはどうした?
Asset StoreのXffect Editor Proを使った。英語のドキュメントとサンプルエフェクトを参考にして作成した。テクスチャはリサイズやアトラス化など、モバイル用に調整をした。
開発当初はUnity標準のParticle System(Shuriken)で作っていたが、Xffectが半額セールなったが故に全てXffectに置き換えた。
ストア登録用の画像キャプチャはどうした?
Editor上でApplication.CaptureScreenshotを使って、1242x2208(iPhone 6 Plus用)でキャプチャした。
キャプチャ用の一時停止機能と言語切替機能を作って、多言語画面を同時キャプチャした。
画像のリサイズは別途一括リサイズしたが、Editor上で画面リサイズまでしてキャプチャする方が良いと思った。
ストア登録用の動画キャプチャはどうした?
MacのQuickTimeでiPhone 6 Plusを録画して、WindowsのAviUtlで編集した。言語別にはせず共通の動画1本。
このWebサイト作成はどうした?
Python3系DjangoフレームワークBootstrapを使って作成した。
現状はテンプレート機能を使う程度のプチ動的サイト。さくらのレンタルサーバ スタンダードを使用しているが、プラン変更やスケーリング機能がないところはネック。アクセス数が増えたら考えれば良し。
次作品で使うアセットは?
UniRx - Reactive Extensions for Unity

リアクティブな時魔法。イベントのフィルタリングや時間の扱いが楽になる。

Particle Playground

エフェクトの作成。テクスチャは他のも活用するが、パーティクルシステムはこれ1本の予定。
こちらを知っていたら、Xffectは買っていなかったかも。しかし、Particle Playgroundの半額セール狙いゆえに、開発終盤で手に入れたアセットだったのだ。

G2U (旧GoogleFu)

Googleスプレッドシートからデータをインポートできるので、何かに活用してみようと思う。
旧名はGoogleFuであり、セール中に$3で購入したが今は$25に値上がりしている…。

次回作で気をつけることは?
試作はスピード勝負。本番は改めて確実に。
コンポーネントは汎用性を考えて部品化しつつ、GameObject間の結合度も弱くしたい。マネージャークラスを除くGameObjectが削除されてもゲームが動き、テストできると吉だと思う。
初めてアプリ開発する人に向けて一言どうぞ!
とにかくシンプルに。完璧より完成を。
今必要ない難しいことは完全放置!必要になった時に必ず覚えられるから!1つの作品ごとに1つの新機能に挑戦するくらいで十分なので、簡単にたくさん作ろう!
最後に一言どうぞ!
ひたすら続けていたらアプリが完成した。
どんなに足が遅くとも、足を止めることなく走り続けよう。何も叶わなかったとしても。