Categories
Nice Fall

Nice Fall作りました

2種類のゲームジャムに参加させていただき、Nice Fallというゲームを作りました。一つはLudum dare48、長い歴史のあるゲームジャムで、多分もっとも有名なジャムではないでしょうか。今回のテーマは『Deeper and deeper』。

もう一つはUnity1Week、かなり高頻度で参加させていただいているジャムで、日本のUnityユーザーに広く愛されておりゲームエンジンを限定している故か、暖かいコミュニティが形成されているジャムです。今回のテーマは『2』。

今回作ったゲームは、井戸の底まで落下し続けるレースで2画面2人プレイとして、おそらく両方のテーマを回収できたと思います。

Nice Fallは横視点の単純なゲームであり、パッと見た感じや操作した感じはどこかで見たことあるような感じで手抜きに見えるかもしれません。そのどこかで見たその元となったゲームについては大いに参考にしましたが、一応今回のゲームの目的に対して私自身の視点でいろいろ調整をしました。どんだけ頑張ったかを語るのはちょっと野暮ですが、かっこ悪いけど語ります。

ゲームのルールへのこだわり

まず、ゲームのルールです。落下という現象は加速度を生みます。発生する速度は基本的にはコントロール不能に近いのではないでしょうか。勝手に加速度が発生するという事は、レースゲームにおけるアクセルボタンを不要とします。より、シンプルな操作を実現する都合のいい競争ルールです。多くのレースゲームは壁にぶつかると減速し、再加速まで大きな時間を要しますが、落下の場合、もう一度落ちれば再加速が可能。スピード感と親しみやすさを両立させることができます。

レベルデザインへのこだわり

次にレベルデザイン。後れをとったプレイヤをサポートするシステムは時に嫌われ、時に愛されます。とあるレースゲームでは、順位が低いと加速度強化をしたり、前方のプレイヤを激しく攻撃するギミックが発生します。これらのギミックは時にやりすぎを発生させてしまい、マリオカートの青甲羅は、順位の交換を絶対的なものにまでしてしまいます。プレイヤにとってより納得しやすく、より自然に、なおかつ有利になっても頑張りが必要なデザインが必要です。

上記を実現するために多種のギミックを用意しました。今回のゲームに代表的なものとして崩れるブロックがあります。最初に到達したプレイヤはこのブロックに到達すると重力加速をいったん止められます。崩れるまで待つか、別の道を探して再加速が必要になります。遅れてきたプレイヤがそこに到達するときにはそこにブロックはありません。ノンストップで下降でき、大きな逆転のチャンスをつかむことができます。一方先行したプレイヤもできるだけブロックを崩さず落下すれば後方のプレイヤに差を広げることができるかもしれません。

棘も逆転を可能にするオブジェクトです。プレイヤに刺さると消えてなくなるため、先行プレイヤがヒットすると後方プレイヤは進行が楽になります。当たった時のピヨピヨもロスが大きいのでレースが拮抗していると緊張感を生みます。

そのほか、落ちる岩石などを用意し、先行プレイヤを直接攻撃できるものも用意しました。ただし、岩石自体は落下ではなく転がって落ちるのでプレイヤの落下より遅いため、仕掛けた自分に当たる可能性があります。プレイヤにスキルを要求するギミックでもあります。

また、追い越す瞬間に他のプレイヤを踏むことで、動きを止めることができるようにしました。落下を競うゲームにおいて本来高い位置にいるほうが不利なのですが、ここも逆転の要素です。

動く床、ジャンプを要求する壁などは、プレイヤのスキルを要求するものになります。ここでスーパープレイを決めてもほんのわずかしかアドバンテージは見込めません。しかし、確実にそのアドバンテージは存在します。上級者がよりハイレベルのプレイをする仕掛けとなっています。

キャラクタの動き

キャラクタを動かすという事はアクションゲームにとって、最大限に重要な要素です。3Dゲームの場合『プレイできない』事態まで発生することがあるのですが、2Dゲームの場合は、一応何とかプレイできるところまで収まりやすいと思います。その一方でプレイヤからの要求が厳しく、プレイできるという程度では満足してもらえません。レベルデザインの良さやストーリの良さなんて、動きの悪さのせいでぶっ飛ばされることだってあります。

今回のゲームでは、まず横移動にこだわりました。過去に作ったNice Discでは熟練のスポーツ選手が狭いリングできびきび動くことを想定したため、ボタンを押したら最高速度、離したら完全に止まる、というロボティックな動きになりました。正直工夫がなく作る上で楽です。Nice Fallではやや動物的な動きが欲しいけど、アンフェアに感じない動きを目指しました。動き出しは0.2秒程度加速時間が発生します。そこから最高速度に達し、キーを離すと減速し0.2秒後に止まります。正直ゲームに影響しないレベルの短い時間ですが触り心地にほんのわずかな違いが生まれました。おそらく加速減速はプレイヤは気づかないと思います。勝負に影響もほとんどしないはずです。ただ動きに柔らかさが生まれたと私は思っています。

そしてジャンプ。下降するゲームなのでジャンプをする機会は少ないです。しかし、必要以上に高いジャンプをするとタイムロスにつながるという事がこのゲームの要求するスキル性にマッチするため、やや高めのジャンプを用意しました。そして押している長さで高さを調整する感じです(大体のUnityチュートリアルはそうなっていますね)。今回のジャンプでは離した瞬間、0.05秒ほどゆっくり上昇し、その後加速度的に落下するようにしました。最高地点で一瞬止まるような感覚を覚えるかと思います。ジャンプを必要とするプラットフォームで他のプレイヤと空中で位置取り合戦を楽しんでもらうためこのような動きを採用しました。

あと、完全に不要なのですがプラットフォームからの落下開始から0.1秒間だけ空中でジャンプ可能にしました。よく言うコヨーテジャンプです。このゲームへの将来性の為実装しましたが、このゲーム内で役に立つ瞬間はありません。勝負抜きで試してみていただけると幸いです。

CPU戦の調整

PvPが基本のゲームですが、どんな時でも楽しめる必要があるためCPU戦を用意しました。Unityのナビメッシュのようなものを実装してしまうとプレイヤは絶対勝てません。目の前のギミックに行き当たりばったりで対応するような挙動であるべきであり、時々トラップに引っかかる必要があります。実はNice DiscのCPUがディスクをかわすのとほとんど同じ仕掛けです。ここはあまり語りたくないですが、おそらく十分楽しめる出来になっていると思います。

後回しにした部分もたくさんあります

2Dゲームを作る際に、ジャンプの高さ調整や移動速度、移動加速度、落下スピード、当たり判定の大きさなど、これらの当たり前の作業がすべてを決めてしまいます。よく神は詳細に宿るという言葉があり、それを意識した素晴らしい作品をたくさん存在しますが、2Dゲーのキャラ移動においては、神も宿っているようですが、悪魔も詳細に宿っているようです。こいつらを徹底的に排除しなければなりません。それも、そのゲームの目的であったり、キャラクタの性質によって違うものを要求されるので、新しいゲームを作るたびにここには時間をかける必要があります。いいゲームを作る以前に、ゲームを壊してしまう恐れがあるためです。

そうすると、残念ながら音や絵については、どれだけ時間をかけないかを目指してしまいます。こだわったところで私自身の実力値もあるので、こだわりが結果に結びづらくなるため後回しになりがちです。この辺は直感でやっています。ただ、直感でやった故、愛おしく感じる部分もあります。

やりたいことを精一杯やる事、これが何よりも大事なら、まあこれでいいのかな。

ただ、いつの日か絵のこだわりを人に語れるようになりたいですね。