Google

2012年8月19日日曜日

Unityでコインゲー開発:時間短縮その3

コインゲー開発で実際に行った時間短縮の続き。

列挙体を書かない、ということを以前書いてありましたが、これについて詳しく話します。
普通開発に於いて列挙体という定義を書かない時はありません。

列挙体ってのは、簡単に言うと種類を定義することなんですが、専門外の方はわかんないですよね。
例えばUnityで使うC#でアイテム一覧なんかを書くならこう書きます。

// アイテム一覧
public enum ITEM_TYPE
{
 COIN_1,   // コイン1
 COIN_10,  // コイン10
 COIN_50,  // コイン50
 CAPSULE, // コレクションカプセル
 BOX     // ランダムボックス
};

んで、アイテム管理クラスなどで、ここに定義された列挙体を変数で持ちます。

 private ITEM_TYPE item_type;

もしくはアイテムを抽選で出す場合、確率情報から決定されたこの列挙体を元に、どのプレハブを実体化させるのか?という判断にも使います。
他にも型付けの強さを持ってコンパイルミスを防ぐとか色々あるんですが、山ほど作るこの列挙体をほとんど作りませんでした。

特にアイテム系は一切。

仕様書にはエクセルで種類全てが書かれるのが普通なんですが、この時は以下の様な仕様確定シーケンスだったのです。

  1. アイテムの系統を決める(コインとか、ランダムとか)
  2. バリエーションを決める
  3. 値段を決める

特に2の作業が開発後半までいろいろモメました。
増えたり減ったりと仕様変更があるのは世の常ですが、エンジニアの立場としては非常に嫌です。
しかも納期だけは最初から確定でしたし。orz

んで、列挙体を書かないという荒業につながるのですが、ここでやっと具体的な話をば。
Unityのインスペクタ、publicメンバにすることでで出るアレ、あれを使います。
あれを配列にすると個数と実体をUnityからぐりぐりと紐付けできるので、これを最大限に有効活用するのです。

この配列に何を登録するかというと、先日公開したInstanceManagerを行うわけです。
実際にはこんな感じ。

 public ItemInstanceManager[] m_instance_mgrs;

そしてアイテム種類別のインスタンスマネージャをn個実体として作り、ぺたぺたと紐付けます。
そして配列の添字そのものがアイテム種別として扱う、といった方法です。
拍子抜けかも知れませんがこれは結構リスキー。
しかし現場で以下のルールを決めることで、非常にうまく行きました。

 ・連番のエクセル資料だけは作る。
 ・予め入りそうな空きも考えておく。
 ・抜けは実行時に判断し、実体があるものだけを使う。
 ・アイテム追加削除作業はプランナーが行う(!)

この方法により、アイテムの種類増減がかなり自由になったのでした。

実際のサンプルが無いと解り使いかもなので、これもそのうち公開してみます。

今回はここまで。

0 件のコメント:

コメントを投稿