最近、「UNDERBUILD」という
空間パズルゲームを作っています。
3×3のマスの中からブロックを選んで、
そのブロックを塔の下側へどんどん追加していくゲームです。
某木の棒バランスゲームのように、
普通は、上へ上へと積んでいくものですが、
下に新しい構造を作って、すでに存在している塔を持ち上げていきます。
制限時間内に、どこまで高い塔を作ることができるのか。
というルールです。
このゲームのシステムには、
「現実世界では絶対に起こらないこと」
を実装しなければなりません。
現実世界では、
下に空洞があったら、上の物体は下に落ちます。
重力というのが存在するので、物理法則では当たり前の現象です。
しかし、このゲームでは、落ちてもらっては困ります。
今回制作しているゲームでは、
下から新しいブロックを生成して、
塔を上へ上へと高くしていく必要があるからです。
下に空洞があったのなら、上のブロックが下に落ちても
別に構わないんじゃないか。と思いますが、
これではただの、トンガリ山が出来ていくだけで、
バランスを崩す機会が減ってしまいます。
よって、空洞の上にあるブロックは落ちてはいけない。
つまり、重力を無視して、3×3の1面として形状を維持しなければいけません。
このルール自体の実装は早かったのですが、
解決後には、すぐ次の問題も出現しまして、
塔全体のバランスが崩れたときには、
ちゃんと物理法則に従って倒れてほしい。
傾いた塔が、ぐらりと揺れて、支えきれなくなって、
3×3のグループとして固まっていたブロックたちが、
バラバラになりながら崩れていく。
それまでは重力を無視していたのに、
倒壊する瞬間には、現実世界の物理法則に戻ってほしい。
つまり、物理法則を無視しなければならない瞬間と、
物理法則を守らなければならない瞬間が共存しています。
これはとてもワガママですね。
最初は、物理演算を正しくコントロールすれば、
ゲームも正しく動くような気がしていました。
でも、現実の物理法則をそのまま適用すると、
今制作しているゲームのルールそのものが成立しません。
だからといって、すべての物理演算を止めてしまえば、
今度は塔が全く倒れず、
ただ高くするだけになってしまいます。
現実ではどう考えても矛盾しているルールを、
ゲームの中では当たり前のルールとして成立させる。
これを考えるのが、ものすごく楽しかったです。
物理法則を無視するために、物理演算を使う。
なんとも矛盾した話ですが、
ゲームを作るのって、謎解きみたいで楽しいですね。
また、実際の動きを見てもらうために動画も用意しています。
