読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【偽スペースハリアー】スペハリの敵の弾は地平線の動きに左右(いや、上下か?)されない

スペースハリアー TravelShooting JP

スペハリの中のオブジェクトは基本的に地平線の動きに合わせて上下に動きます。
正確には地平線の動きではなく、オブジェクトがいる位置の地面の位置に連動して動くので、遠くにいる敵は大きく上下に動き、近くに来るにつれて動きは小さくなります。
そして、ハリアーがいる、一番手前の位置にいる敵オブジェクトは動きません。
例えば、弾に当って「アーーー」とハリアーが落ちて行って地平線が下がっても当った弾の位置は変わりません。なぜなら、この位置の地面は上下に動かないので。

さて、そんな中で唯一の例外が敵の弾です。
これらは地平線(地面)の上下の動きを無視し、発射位置から発射時にハリアーがいた画面上の場所に向かってまっすぐ飛んできます。

これは3D的にはおかしな動きなのでで不自然に見える場合があります。
例えば、下の動画の58秒付近で遠くからドラゴンが弾を撃ちます。その後、ハリアーが下から上に移動しているときに弾の影が弾より上にできているのがわかると思います。(この動画は私が作った偽スペハリですが、本物も同じようになります。)

つまり、3D的には弾が地面の下に潜ってしまっている状態です。

本物の実装がどうなっているのかわかりませんが、私の偽スペハリでは弾が発射された時点の地平線の位置を覚えておいて、3Dから2Dへの座標変換時に実際の地平線の位置ではなく、覚えておいた位置を元に計算しています。
一手間余計に掛かり、3D的に破綻する場合もあるのですが、あえてこのようにしている理由は、恐らく弾を避けやすくするためだと推測します。

両方実装して試してみたところ、地平線に合わせて動かした場合は弾がどこを狙って飛んで来ているのかわかりづらく、避けた方向に向かって飛んでくるように感じられる事がありました。
それに対し、本物のスペハリのように地平線の動きを無視した場合は、弾が遠くにあるときにハリアーが弾を避けるように上下に動くと弾が反対方向に動いているように見え、避けるべき方向がわかりやすく感じました。

さすがセガ。プレイヤーが壮快に遊べるように細かい部分まで考えられています。

上の方に、ハリアーに当った弾は位置が変わらないと書きましたが、この「当たった弾を消さずに」残すという処理も重要だと思います。
3Dゲームでは前後の正確な位置関係がわかりづらいのでプレイヤーは勘で弾を避ける訳ですが、やられたときにそこに弾が残っているだけで、「俺はこの弾にやられたんだ。俺が悪い」と納得がいきます。
逆に当った弾が画面から消えてしまうと、「俺は避けたのにやられた。バグだ」となる訳です。

さすがセガクレーマー対策もバッチリです。

見習わさせていただきます。