「それUnityでよくない?」的な話が多いので紹介メモ。
主観
iPhone/Android のクロスプラットフォーム対応を考えると、最近は以下でいいんじゃないかと思っている。
それ以外を学ぶ余裕があるのなら、積読の一冊でも消化したほうがよい。
- Unity - 高いインタラクティブ表現が必要とされるもの
- Monaca - Unityほどのインタラクティブ表現が必要ないもの
- 要件によっては、Swift(Objective-C)、Javaなどのネイティブで作成
ゲームエンジン(或いはインタラクティブなフレームワーク)
あって当たり前のものは当たり前にある。
- フレーム単位処理
- 衝突判定
- 落下や衝突などの2D/3D物理演算
- アニメーション
- 2Dスプライト
- 3Dでのカメラ視点や光源
- 3Dオブジェクトへのレンダリング
あと、パーシャル、マルチプレーヤー、経路探索、VRとか諸々。
カジュアルな2Dゲーム
Unityというと、ハイエンドな3Dゲーム用開発キットというイメージが大きいが、カジュアルな2Dゲームも普通に作れる。そもそも新規作成時に3Dか2Dを選択する。
実際には「オブジェクトをZ座標0に配置」「カメラ視点をZ軸に対し固定」なので、純粋な2Dというわけでないが、開発上あまり問題にならない。
AssetStore
Unityの魅力の半分は「AssetStoreの充実度」。
2D/3Dオブジェクト、音源、背景、アニメーション、スクリプト、開発ツールなどが膨大にあり、無料/有料で入手できる。
Personal版、Professional版
Presonal版(無料)とProfessional(有料、18万ぐらい)があるが、ゲームエンジンとしての機能差は実は殆どない。
「収益による制限」「スプラッシュスクリーンの変更」等には注意する必要がある。
mBaaSとの連携
Parseや Nifty Cloudのmobile backendはUnity用SDKを出している。デファクトであることの強み。
開発
Unityの開発作業はGUI上での調整が多い。元々、コード主体のIDEでの開発が多いと、違和感があるかもしれない(が、慣れればどうってことはない)。
ざっくりな実装の流れ
- 1つのプロジェクトは複数のシーン(メニュー画面、メイン画面など)を持つ。
- シーンにオブジェクト(GameObjet)を配置し、見た目(大きさとか向きとか)や衝突範囲を調整する。
- ある程度、調整が済んだら、prefab化し、再生成可能にする。自機や固定障害物など複製されないオブジェクトなら、prefab化しなくてもよいかもしれない。
- オブジェクトにコンポーネントやビヘイビアスクリプトをくっつける(アタッチ)。
- グローバルな処理がしたいのであれば、シーンにそれ専用のオブジェクトを作成する(GameController的なやつ)。
ビヘイビアスクリプト
パラメータはGUIから設定するが、ロジックはビヘイビアスクリプトに記述する。
言語はC#。JavaScriptも使えるけど、サンプルの入手容易性を考えると、C#に寄せたほうが良い。
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
// publicパラメータはGUIから上書きが可能
public int point = 10;
// 初期化時処理
void Start () {
}
// フレーム毎処理
void Update () {
}
// colliderコンポーネントをアタッチした場合、衝突時呼び出される。
// 通常、イベントは自動で紐付けられるが、UIの場合、手動で行うこともある
void OnTriggerEnter(Collider collider) {
}
}
コルーチン
コルーチンを利用することにより、フレーム単位処理が容易になる。
void Start() {
StartCoroutine("Wave");
}
IEnumerator Wave(){
while(true){
FirstAction();
// 1フレーム待機後再開
yield return null;
SecondAction();
// 20秒後再開
yield return new WaitForSeconds(10);
}
}
管理画面
標準のUIコンポーネントやwebviewプラグインもあるにはある。
が、データの一覧とか入力フォームとかそういった管理画面っぽいものを作りたいなら、HTMLのほうが楽。