「あける」パズルゲームを作った
Unity1Weekに参加しました
今回のお題は
今回は平日に全く作業ができなかったので作業したのは
土曜日と日曜日のみでした。
作ったゲームがこちら!
誰でも5分程度でできる簡単なパズルゲームです!
ネタの出し方
「あける」を「開ける」に解釈してネタを考えました。
作業できる時間がほとんどないことがわかっていたので自然とパズルゲームにするという考えに至りました。
会社にあるロッカーを見ていて「隣の扉が開いているときにはもう片方は空かない」ということをゲームにしたら面白いんじゃないかという発想でした。
ロッカーは誰もが目にしたことのあるものなので説明が不要で直感的という点でも今回のゲームに一役買っていたかと思います。
実装のポイント
実装に関してですが全体を見てもかなり簡単な作りです
Manager : ゲームの進行を管理
(SEなどもここからDoorクラスまで渡している) 一つしか存在しない。
Level : 現在のステージの状況を管理
ステージの数だけ存在している
Door : タップされたらLevelに情報を渡す
ドアの数、どちらに開くかなどの情報を設定できる
Levelに配置されているDoorの数だけ存在している
Managerでゲームが進行したときにはLevelを新しく生成して
次のステージに進行させ、Levelでステージの状況を管理しています。
Levelが二次元配列で現在の盤面の情報を持っています
ドアの設定はすべて手で行っているので大変でした...
タップされたDoorの位置をもとに上下左右のDoorの状態を見て開けるかどうかを確認して開けるなら状態を更新してクリアチェックを行います
ちなみにLevelでは以下のようなコードで四方向チェックしていますがもっとスマートなやり方があるかと思います...
// --- 下の要素取得 ---
// 下に要素があるか
int down = (int)door.Number.x + 1;
if (down < _size)
{
// 上方向に開くか
foreach (var direction in _doorList[down][(int)door.Number.y].DoorDirections)
{
if (direction == Door.Direction.Up)
{
// 下に開いているか確認
if (_doorList[down][(int)door.Number.y].IsOpen)
{
Debug.Log("下があいてるぜ!");
return false;
}
}
}
}
else
{
Debug.Log("下に要素がない");
// 下に要素がない
}
こだわり
このゲームだと難易度を上げるのは難しいと気が付いたので
どちらかというと気持ちよさの方を重視して作りました。
あけた時のSEや動きは何回やっても邪魔にならず開けたり閉じたりするのが楽しいと思えるように設計しました。
気づき
このゲームを作って気が付いたのは
パズルゲームにおいて戻りが発生する場合には気を付けないといけない
ということです。
戻りというのは元の状態にするために自分の操作を取り消す操作のことです。
このゲームでは開けない扉ができてしまったときに必ず
自分のやった操作をもう一度行わないといけないのです。
これがやっているときの最もストレスを感じました。
自分の操作を否定されているというところから発生しているものだと考えられます。
戻りを回避するためには以下のような方法が考えられます
- 解法を複数用意してカバーができるようにする
- 最初からやり直すことができるようにする
これらを考えずにパズルゲームを作ってしまったのはミスだったと気が付きました。
やりたいこと
今回のゲームジャムで時間が足りなかったのでできなかったことがたくさんありました
- 開けた時の気持ちよさを最大限にする
あけた時に中身が空だと目的がわからないと思いました
あけたら派手なエフェクトが再生されて、中にはお宝や驚きがあるものが入っている方がユーザーにとって良いフィードバックになるのは間違いありません。
- ギミックの追加
本当はスライドできるドアや、回転できるドアを入れてもっと自由度と難易度を上げる予定でしたが時間が足りず断念してしまいました...
しかし、実装自体はすぐにできるように作ってあるのでまた時間のある時にアップデートしたいと思います。
- ステージの大きさをもっと変えてみる
NxNのステージを作れるようにしてありますがステージの配置は手作業でやっていたので4x4が限界でした...
おわりに
実質2日のゲームジャムになりましたが動くものができているので
これをさらにブラッシュアップしていく方向でやっていきたいと思います!