シンプルなゲームだと考えて制作開始したコイン落としゲームですが、製作中に他のアプリと比較してみると、色々と見えない工夫がされているんだな~という発見がありました。
特徴の比較
まず、コココインの開発中画面を見て下さい。
コインが大変荒ぶっていますが、このような状況は他のコイン落としゲームではまず見る事は出来ません。
次に、コココインに近いタイプのポップ系のコイン落としゲームを見てみましょう。
見ればわかるように穏やかなものです。このように、一般的なコイン落としゲームでは3枚以上のコインが重なるという事はまれです(重なってもすぐ崩れて綺麗にバラける)。
(※たまにある、ジャックポットがあるようなリアルさやゴージャスさを売りにしたコイン落としは、4枚程度くらいには重なります。が、やはり動きにデフォルメが効いており、最初の写真ほどまでのゴチャついた感じにはならないようです。以降の説明および分析は、ポップなゲームデザインのコイン落としについてです)
また、コインの挙動にも注目する必要があります。現実のコインを上から台に落とした場合は、ランダムな回転を伴ってランダムな向きで落ち、落下角度や落ちた先にコインがあったりする場合などによって跳ね、あるいはコロコロと転がったりします。転がったコインが横に倒れてもすぐに静止せずクワワワと音を立てて暫く振動し続けたりします。物理演算を導入しているUnityで作っているココのコイン落としも、当然それに類似した動きをします。
しかし、コイン落としゲームのコインの挙動は一般的にドッシリしています。それでいて動きは軽やかです。
上から落下してもそのままフィールド上に静止して跳ねる事もありませんし、コロコロ転がる事もありません。コインが倒れてもペタンとそのまま静止します。まるで、とても硬くて重い物質のようです。
それでいて、プッシャーから押された時は少し滑り気味にスムーズに動きます。まるで、とても軽く滑らかな物質のようです。
このように、現実的なコインとは違う、ゲーム的なデフォルメの効いた動きになっています。摩擦係数などのパラメータの設定についても同じ事がいえます。
これは単なる動きの見栄えの良さ以上に良く出来ていて、既に上の画面を見てもわかりますが結果としてコインが綺麗に散らばりやすく、ゲーム画面として整然としており、ゲーム性の向上にも繋がっています。
分析
では、よくあるコイン落としアプリの挙動・ゲーム性に近づけるにはどうすれば良いでしょうか。
まずコインの重なり合わせを回避する為に、投下コイン数の上限を設けます。
ひたすらコインを連発出来るのではなく、たとえば発射可能数が5発で、コインを1つ投入すると1つ減り、0になると投入不可能に。そして1秒間に1発分回復する、というようにします。
これにより、少なくともコイン投入の連打によって過剰にコインが重なったり、間隔が詰まりすぎて画面が混沌とするという事は物理的に防ぐ事が出来ます。
更に、Physic Materialを追加してコインのColliderに追加し、コインの摩擦係数を下げます。これにより、重なり合ったコインは比較的滑り落ちやすくなり、フィールド上でも動きやすくバラけやすくなります。これを下げすぎても落ち着きのないコインの動きになってしまうので気をつけます。次に弾性係数を0あるいは非常に小さくにします。
また、Rigid BodyからMassを大きくします。これで動きがドッシリとなり、不自然にフラフラする事がなくなります。
更にDrag(空気抵抗)やAngular Drag(回転に関する空気抵抗)を大きくします。これで更に動きが安定します。この数値をあまり大きくするとゆっくり落下する様になってしまうので、そんな場合はコイン射出時にはAddForce()で下向きに大きく加速させます(質量が大きいので加速させたいなら大きな値が必要)。また、落下時は完全に横向きの状態で落下させ、下向き以外の力は与えません。
これにより「スッと落ちてピタッと地面に落ちる」ゲーム的なコインの動きになり、その後のコインの動きや分布からも妙なムラが減ると思います。
まとめ
特にシンプルなゲーム内容であれば物理演算でリアルな挙動のゲームを非常に簡単に作れる便利な世の中になりましたが、
ゲーム性の高いゲームを作る為には、敢えてその「リアルっぽさ」を適度に間引きする考え方や手法を身につける事が大事だと思いました。
コメント