developer notes

Unity1週間ゲームジャム

恒例の1週間ゲームジャムに参加。
今回のお題は「さがす」ということで、「何」を「どのように」探すかを考えた。

サーチ&デストロイするアクションゲームとかも作ってみたいもんだけど、

1週間で完成する気がしない。

毎回遅刻するのが当たり前みたいになっているので、手堅くコンパクトなゲームを目指した。
「対になるカード」を「ソナー」で探す。
これならゲーム本体はサクッと作れて余った時間を細かい作り込みに費やせるはず。

難題

神経衰弱のルールは単純なので実装はさほど難しくない。
とりあえず13組+ジョーカーの27枚を縦横9×3に並べて、選択したカードをひっくり返すところまでは順調に進んだ。
でも、これでは味気ない。
神経衰弱って不規則に配置されたカードにこそ趣があると思う。カードの向きや周辺のカードとの位置関係が記憶の手掛かりになったりもする。
そのためのアルゴリズム、

一定の範囲内で重ならないようにカードを配置する

これが難しかった。
一枚ごとに「ランダムな位置と向きで配置してみて他のカードと重なったらやり直す」という方法だと永遠に終わらない可能性がある。
テーブル上に見えない壁(Collider)を配置して物理演算で流し込むアイデアもあったけど、

思い通りにならないのが物理演算

だと再確認する結果に終わった。

最終的には前述の方法の改良版「ランダムに配置するが再試行するたびに重なり判定を緩くする」という方法で実装した。再試行が一万回に達するとほぼ完全に重なっても許容する。
もっと良い方法はないのかなぁ。

締め切り前日のゲーム設計変更

ソナーがついたところで神経衰弱が楽しくならないことに気づく。そもそも、

神経衰弱は一人で遊ぶものではない

気がする。
一定回数のお手付きでゲームオーバーだと難易度が高すぎるし、何度もカードがめくれるようにすると時間をかければ簡単にクリアできてしまう。というか時間をかけてまでクリアするモチベーションがない。

で、一度めくったカードは開いたままにして、カードを取る順番を考えるゲーム性に方向転換した。高得点を得るには数字の大きいカードを倍率の高まる後半まで取らない戦略が求められる。
元は神経衰弱だったのに

なるべくカードを取らないようにする

ゲームになってしまうとは・・・

今回の開発で得たもの

  • TextMeshProを初めてちゃんと使った
    • 文字装飾が簡単につけられるのが嬉しい。
  • Physics.CheckBoxメソッドの存在を知った
    • いわば飛ばないBoxCast
    • 対象物が動くと次フレームまで反映されない
  • 自前のeasing関数を書けるようになった
    • 単純なものならアセットをインポートするまでもない

まとめ

今回も有意義な一週間でした。
naichiさんと参加者の皆さんに感謝。