Unityアクションゲーム制作記 その12 ダンジョンを作る
引き続き前回出た課題、シーンに配置したオブジェクトが、直にアプリサイズに影響するということで、ダンジョンを構成するオブジェクトを生成(ダンジョン自体を自動生成するわけではない)するアプローチをしていきました。
作りたいダンジョンはこんな感じ(↓)。
- 部屋は四角のみ(穴開きはなし)
- 部屋の大きさは3×3以下にしない
- 部屋の一辺に一つの通路のみ接続
- 高低差はなし
これくらいの単純なダンジョンであれば、床のある場所の上下左右を調べ、空白であればその方向に壁を置く、やることはこれだけ。ただ、一つ問題が……床と壁のメッシュが分離しているアセットはいいのですが、購入した背景アセットの一つが、床と壁が一体化したメッシュのものでした。
それぞれ別にするのもアレなので、結局は、一体化したパーツに統一してダンジョンを作っていくことに。まぁ、パーツの規格を統一することで、少ない手間でバリエーション(外観だけだけど)を増やせるというものです。
ダンジョンを構成する最小単位のオブジェクトはどんなものを用意すればいいのかなーと、パターンを書き出してみると、どうやら最大16パターンのパーツがあればいい模様。
- 0の位置(上)空白だった場合は+1
- 1の位置(右)空白だった場合は+2
- 2の位置(下)空白だった場合は+4
- 3の位置(左)空白だった場合は+8
と順番に調べて足していけば、必要なパターン番号が求められます。しかも、同じ形状を回転しているだけのものも多いので、それらを省いていくと実際に使われるオブジェクトは、さらに少なく6個で済みます(しかも1個はほぼ未使用)。パターン番号から使うプレハブと回転の変換テーブルを用意しておけば、6個のプレハブを用意するだけで一つのダンジョンの基本形状をまかなえるということですね。
実際は通路に別形状を使いたかったり、一つのダンジョン内で複数の壁や床のバリエーションを使いたかったりするので、もう少しパーツの種類は増えます。それでも、シーンにおいて実体化させるよりは格段にアプリサイズを削減できました。
左が調整前のダンジョンの外観バリエーションが一つ、ステージが二つの状況です。そこから、ダンジョンの外観バリエーションを三つに増やし、ステージも7つ用意しても劇的な変化。ちなみに、このダンジョン作業をしてミニマップを作り終えたくらいでSSDが吹き飛んで作り直しを余儀なくされました……ということで、左側の状況は作り直し前の状況の画像なので、あくまで参考という感じの比較になってしまいましたが……。
とはいえ、当初の目的であるアプリサイズを削減することは達成できたので、ひとまずヨシとしておきます。 なおどれくらいまで一度に表示しても大丈夫なのかなーと広めのマップを作ってみたところ、これくらいが限界っぽい(Zenfone2を使用)。
うーん、全般的におりこうさんな作りにしてないとはいえ、もう少し頑張りたいところだなぁ。まだ知識が全然追いついていないので、最適化までは考えが及ばないのが悲しい現実だけど。ひとまず動く範囲の大きさで抑えつつ、やりたいことを突っ込んで行こう。まだまだ作らなきゃいけないものはわんさかあるからね…がんばろ。