developer notes

Unity1週間ゲームジャム

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

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

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

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

難題

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

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

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

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

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

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

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

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

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

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

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

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

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

今回の開発で得たもの

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

まとめ

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

developer notes

Unity 1週間ゲームジャムに参加。
今回はまったく参加するつもりがなくて、お題を知ったのも週の半ば。
でも一度お題を見てしまうとあれこれ考え始めてしまい、とりあえずUnityプロジェクトを作ってみた。

ネタ出し

「つながる」ということで最初はランダムに配置された何かを線で結ぶゲームを考えた。ありがちかもしれないとは思いつつ、ネタ被りを気にしていたら何も作れないし、いくらでも差別化する方法はあるだろうと考えながら、ふと気づいてしまった。

前回自分で作ってるよ!

WINDING WIREが線で結ぶゲームだったわ。

お題を入口にして考えるといまいち発想が広がらない。そして行き着いたのがこれ。

すでに木曜なので凝ったゲームは無理だと割り切ってブロック崩しを選んだ。ブロック崩しならサクッと作れるとこの時は思っていた。

物理エンジンとの格闘

ボールが壁に当たって跳ね返るというブロック崩しの根幹が実は何気に難しい。ColliderにPhysic Material、Rigidbodyを正しく設定した上でAddForceを呼ぶ。でもなぜか跳ね返らずに壁に吸いつくことがある。壁にPhysic Materialをつけてみたり、ボールの初期配置を変えてみたりしたけど一向に解決せず時間が過ぎた。

Bounce Threshold

さんざん悩んだ末にProject SettingsのPhysicsにこんなパラメータを見つけた。物理エンジンは関連項目が多すぎるよ・・・

お題「つながる」

基本的にブロック崩しはイライラするゲームなので、これを解消しつつお題を満たすことを考え、二つのボール間にあるブロックをまとめて粉砕する仕組みを導入。インパクトフレアと呼ぶことにする(いま名付けた)。
この仕組みを生かすにはボールを任意の方向とタイミングで打ち返せる必要がある。一応、左右キーに連動してパドルを傾けられるようにはしてみたけど、やっぱり狙った場所に打ち返すのは困難だと思う。結果として運ゲーになってしまった。

パドルを傾けたときのエネルギーがボールに伝わってやたら高速な展開になることがある。これはこれで楽しいけど、リスクが高まるだけなのでオススメできない。ブロックを一定時間内に連続して破壊すると倍率がかかるようにすればハイリスク・ハイリターンでゲーム性が増したかもしれないなー。

やり残したこと

ブロック破壊エフェクトを後回しにしていたら結局実装できずに終わった。ブロック崩しの最大の目的なのに爽快感も何もなくてごめんなさい。頭の中ではいろいろ考えていたんだけど実現方法がすぐに思いつかなくて諦めた。

全体的に作り込みが足りないのはブロック崩しを甘く見ていたのが敗因。火曜くらいから着手していたらもう少し作り込めたはず。いや、火曜に出るアイデアならブロック崩し以外の何かを作っていたか・・・

とはいえ、こんなハプニングもありつつ7時間程度の遅刻で投稿できたのは良かったと思う。次回はお題が発表されたらすぐに確認するようにしよう。

タイトルについて

ディーヴァというレトロゲームへのオマージュです。