ゲームを楽しくするための「嘘物理」 ~ 衝突とジャンプの例で考える

ゲームを楽しくするための「嘘物理」 ~ 衝突とジャンプの例で考える

「嘘物理」

みなさんは、ゲームをプレイしているときに、物体の挙動を見て「いや、そうはならんやろ…」と思ったことはないでしょうか?
ゲームの物理法則の中には、現実で考えるとおかしいものがあります。
この中には、計算能力の制限などにより現実をうまく再現しきれなかったことによるものもありますが、意図的に仕込まれているものもあります。
そのような「ゲームを楽しくするために意図的におかしくした物理法則」を「嘘物理」と呼ぶことにします。

衝突の嘘物理

昨日、Crazy Cupsというゲームをリリースしました。
(「Play」ボタンを押すとすぐに遊べるので、ぜひ遊んでみてください!)

Crazy Cups

もし、遊園地のコーヒーカップが突然暴れ出したら…!
そんな想像から生まれたバトルゲーム。

Game Browser Battle

サムネイルを見ていただければわかるように、カップとカップが激しく衝突するゲームになっています。
カップが衝突すると反発していますが、実は現実の物理法則とは敢えて矛盾させています

衝突の式

質量がmim_iで速度がviv_iの2つの物体があります。
物体が衝突して反発した後の速度をviv_i'とすると、viv_iは以下のように書けます。

v1=em2(v2v1)+m1v1+m2v2m1+m2\displaystyle v_1' = \frac{em_2(v_2-v_1)+m_1v_1+m_2v_2}{m_1+m_2}
v2=em1(v1v2)+m1v1+m2v2m1+m2\displaystyle v_2' = \frac{em_1(v_1-v_2)+m_1v_1+m_2v_2}{m_1+m_2}

ここで、ee反発係数です。
反発係数eeは0から1までの値を取り、1であれば運動エネルギーが保存される弾性衝突になります。
一方で、1よりも小さいと非弾性衝突となり、運動エネルギーの一部が熱エネルギーなどに変換され散逸します。

当初はe=0.8e=0.8ぐらいでゲームを作っていたのですが、これだとカップが衝突してもスリルが足りませんでした。
そこで、ee1よりも少し大きくすることで、スリルを出すことにしました。
eeが1よりも大きいというのは、衝突により運動エネルギーが増加することを意味するので、これは嘘物理になります。
まるでバネであるかのようにボヨヨンと大きく反発するので、衝突に大きなスリルが生まれました。

ジャンプの嘘物理

アクションゲームであれば、ジャンプが無いゲームはほとんどないというほどジャンプというのはありふれた動作です。
一方で、ゲームにおけるジャンプは嘘物理の宝庫でもあります。

空中での方向転換

例えば、マリオはジャンプした後に空中で方向を変えることができますが、私たちはジャンプしたら空中で方向を変えることはできず、着地を待つことしかできません。
マリオが嘘物理ではなく現実の物理法則に従っているとしたら、クリボーを踏みつけるのはずっと難しくなってしまうでしょう。
嘘物理のおかげで操作性が良くなっているので、私たちは逆に違和感なくマリオの挙動を受け入れられているのだと思います。

放物線を描かないジャンプ

ジャンプを物理的に定式化すると、「地面を蹴ることで上向きの初速度を得て、その後は重力加速度によって下向きの一定の加速度がかかり続けること」です。
これは等加速度運動であり、その軌道は放物線を描きます。

これが物理的に正しいジャンプなのですが、もっさりした印象を受けないでしょうか?
一つの原因は、頂点付近で速度の絶対値が小さくなることにあります。
そこで、嘘物理を導入しましょう。
今回は、「頂点に達したら重力加速度が2倍になる」という嘘物理を導入してみます。

いかがでしょうか?
先ほどよりもシュッとした印象になったと思います。
頂点に達したかどうかは、「速度が0以下になったかどうか」で判定すればよいので、実装も簡単ですし使いやすい方法かと思います。

まとめ

ゲームの物理では、正確性と同じぐらい楽しさが重要になります。
そのためには、時には物理法則を意図的におかしくすることがあります。
私たちが「嘘物理」の方をむしろより自然なものとして受け入れているということは、かなり興味深いことなのだと思います。

目次

Feedback

あなたの一言が大きなはげみとなります!

有効な値を入力してください。
有効な値を入力してください。
有効な値を入力してください。