忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

バネ付きカメラ その1(前置き)

XNAのサンプルの1つChase Camera Sample(XNA Creators Club Online)についてわかったことをいくつかメモしておきます。
コードについてはその2
バネが満たさなければならない条件はその3です。

このサンプルは何なのかというと、動いた宇宙船を追跡するカメラです。ただしバネ付きの。

3Dシューティングゲームやレースゲームなどは、プレイヤーが動かす乗り物にカメラがついていきます。
プレイヤーの動かす宇宙船が前に進めばカメラも前に動き、宇宙船が左を向けばカメラも左を向きます。

※これは当たり前のことで、宇宙船を動かしたのに画面がついていかなければ、自分の宇宙船が画面に写らなくなってしまいます。これではゲームになりません。(もっとも、「画面に映っていない自分の宇宙船を上手く操作する」という別のゲームとして遊ぶことは出来るかもしれませんが。)

これ(「これ」というのはもちろん「画面に映っていない自分の宇宙船を上手く操作する」というゲームのことではなくて、乗り物が動けば画面も動くということを指しています)を実現する方法として最も簡単なのは、乗り物が動いたときに、それと同じだけカメラも動かすことです。

camera.jpg
ただこれはあまりよくないかもしれません。
というのも、安っぽい感じがするからです。前進するボタンを押すとすぐに同じだけ動いて、離すとすぐに止まるのです。それよりは変化が徐々に現れた方がリッチな感じがしないでもありません。
スイッチを入れればすぐに光る豆電球よりもちょっと時間のかかる蛍光灯の方がリッチな感じがしなくはないかもしれません。

その他の理由として、この方法だと3D酔いしやすくなるという話もあります。
実はこの話の真偽のほどはわからないのですが、全くありえないという話でもないかもしれません。
乗り物酔いというのは、人間が進化した環境(数千年前くらいまで)でありえなかった動きによってもたらされるものであり、このカメラの動かし方はまさにそれであるとも考えられるからです。

人間は数千年前まで自動車や電車からは無縁で、そのため自動車や電車の中で酔わない淘汰圧が無かったのです。
ならば自動車や電車の中で酔うようになってもふしぎではありません。
これはちょうどテスト駆動開発と同じ話で、つまり人間には「乗り物の中で酔わない」というテストが存在しなかったので「乗り物の中で酔わない」という機能も実装されなかったのです。

同じ話がこのカメラの動かし方にも言えるかもしれません。
つまり、人間の進化した環境では、自分の足を動かすのでない限り、自分のした行動はある程度のタイムラグがあって反映されるはずで、ボタンを押す指の動きが直ちに画面全体の動きに反映されてしまうこのカメラの動かし方は、酔いを引き起こしやすくてもふしぎはないかもしれません。


脱線しましたが、つまりここで重要なのは別のカメラの動かし方が必要だということです。

とくに重要なのは、画面が徐々に動き出すということです。




拍手[1回]

PR