2011年2月28日月曜日

ホーミングレーザーに関する調査

ホーミングレーザーを実際に実装してみて、気づいた事などをメモしたいと思います。
今回は、ほかにも実験していることがあり、動画ではなく静止画だけになりました。すみません…。

あと、2Dシューティングゲームのゲームの仕様の検討に関しての途中報告です。

UROBOROSXNA_20110226


2Dシューティングゲームの仕様に関して

ホーミングミサイルには関係のない話が続きます。ホーミングレーザー以外に興味が無い方は読み飛ばしてください。

現在2Dシューティングゲームの仕様を検討中です。
大きく仕様を2つの方向に絞り込めてきたのですが、どちらにするかは実装してみて試すしかないと思っています。ただどちらにしても、基本は弾を避けることよりも、破壊がメインになるようにする予定です。

1つは、スターソルジャー風のゲームで、そうする場合には、おおよそのプログラムは入れられたので、後はステージデータを作製するだけで完成まで持って行けると思っています。実際仮のステージと敵を配置して作製してみたのですが、ある程度爽快感も感じられて少しは面白いかなとも思えたのですが、何か少し物足りない感じがあり、そのまま作っても心残りになりそうです。

もう1つは、もう少し爽快感や気持よさを狙うものを検討しています。ある程度仕様も描けてきたのですが、実際作製してみないと本当に気持ちよいと感じれるか分かりません。ありがちですが、通常ショットをさらに前方向だけの単純なものにして、ホーミングレーザーで敵を一掃する要素を入れようと思ってます。多くのゲームでは、ホーミングレーザーは強く、通常ショットの代わりに使うものという扱いですが、

三國無双風に例えると、弱攻撃=通常ショット、強攻撃=ホーミングレーザー、無双技=一定時間継続できる超強力ショットぐらいのイメージです。一定間隔を空けることで制限なくホーミングレーザーは打てるようにして、とにかく気持よさ優先のためターゲッティングも全自動、ターゲッティング範囲も画面上に存在すればOKぐらいの、割り切った仕様にして、人を選ばない、だれでも簡単に遊べる仕様が良いかなと思っています。思いとしては、シューター以外の人がちょっと遊んでみようかなと思える感じを狙いたいです。

超強力ショットってなんだということですが、自分でもまだよく分かりませんが画面を埋め尽くすぐらいの何かを思い描いてます。得点を稼ぐための鍵となるショットと考えてます。ゲームバランスがどうとかいうのもありますが、そのあたりは作った上で調整するしかないのだと思います。

 

超極力ショットに関して余談です…。
昔ゲームセンターの隅の方に、かなり古いのシューティングゲームだけを集め、いろいろ並べてあって1ゲーム10円~20円の破格で遊んでいた時期がありました。そこにはDarwin4078という良質なゲームがありまして、自機が突然変異を起すことで、画面を埋めつくすショットになるのですが、これをみて友達と大笑いした記憶が残ってます。それぐらい思い切りのよい感じが良いなと思ってます。

普通におもしろいゲームよりは、なんだこのゲームはと思われるような、印象に残るゲームが作れればいいなと思ってます。インディーズゲームのなので、なんでもありかと…。


ホーミングレーザー

自機が発射するホーミングレーザー実装に関して気づいたことをメモします。

なお、ここでいうホーミングレーザーは、画面上をぐねぐねと相手キャラクタを追いかけるやわらかい棒状のレーザーのことを言ってます。

UROBOROSXNA_20110226

 

自機と敵が発射するホーミングレーザーの違い

ゲームプログラムする人にとっては、当然のこと?が書かれてるのかもしれないですが、自分とおなじぐらいのゲーム作製初心者の方の考え方の役に立つかもしれません。反対に全然ダメダメなことを言ってる可能性もありますので、御了承ください。

敵が発射するホーミングレーザーについては、ターゲットが自分の左にいるか右にいるか判断してレーザーの進行方向を少しターゲットに近い方向に起動修正して追いかけるというアルゴリズム(以降左右判定方式)で実装していました。いろいろなWebで紹介されていて、なるほどと思った方法です。実は、自機のホーミングレーザーに、この方法適用して遊んでみたのですが、残念ながら爽快感や、気持ちいいと感じは少ないように感じました。(調整が悪いだけかもしれないのですが…)

よって、左右判定方式は、敵が発射するホーミングレーザーにピッタリだが、自機の発射するするホーミングレーザーには向かないという結論に至りました。
以下、敵のホーミングレーザーに、左右方向修正方法が向くと思った理由です。

  • ホーミングレーザーの軌道が単純なので、プレイヤーがホーミングレーザーを避けやすい。
  • 角度修正の角度を小さくすることで、難易度調整が簡単。
  • 一定期間経ったら画面外にでていくようにする場合、曲げるのをやめて直進して画面外へでていけばよいのでプログラムも簡単。

 

一方、自機の発射するホーミングレーザーは次の点が重要だと思いました。

  • 最後は確実に敵にヒットする。(斑鳩やレイストームのレーザーは敵に必ずヒットしてました…。)
  • 曲がり方がかっこ良くて気持よさを優先したい。(敵はレーザーを避けるとかは必要無い)

ということで、またまたWebを探してみたのですが、C++/HSPでSTGを作っていく blog様がカーブによるホーミングレーザーの動画を公開されてました。こちらは市販のゲームっぽい軌道を描いて、かなりいい感じに見えました。なお、カーブにはベジェ曲線を使用されていました。

大変ありがたく思いつつ、この方法を参考に実装してみたのですが、見た目などを含め自機が発射するホームページレーザーに非常に都合がよいことが分かりました。

ベジェ曲線は最初の点と最後の点を必ず通過することが保証されているので、最初の点が自機の位置、最後の点を敵の位置を代入して計算することで、きれいな曲線を描きながら、最後には必ず敵にヒットさせることができます。

つまり、敵が毎フレームはげしく画面を動きまわっても、毎フレーム敵の最新の位置を最後の点の位置に代入して曲線を計算すれば、きれいなカーブを描きつつ最後は必ず敵の位置にレーザーはたどり着きます。
自機が発射するレーザーは必ず敵に当たることが保証されるので、最後はヒットテストせずに当たったことにしてしまうのもありなのではないかと思います。

後、余談ですがベジェ曲線以外にも、最初と最後の点を通る曲線はいくつか存在するようですので、良さそうなのをテストしてみようと思います。

※最近の自分勝手な教訓としまして、「とりあえずゲームで動き方に困ったらカーブを使う」というのがあります。アニメーションにしても、敵のなめらかな動きにしても、カメラにしても、とりあえず動きに困ったらカーブを使えば何とかなると思い始めてます。

 

ホーミングレーザー発射しながら、移動した場合の問題

これは、市販のゲーム(例えばレイストーム)にもおなじ問題が発生してました。
どういうことかといいますと、ホーミングレーザーは、発射してからレーザーの末尾が発射位置にとどまります。レーザーを発射しながら右移動したのが以下の図ですが、レーザーのしっぽがレーザー発射位置に残ってしまうという現象が発生してしまいます。

UROBOROSXNA_20110226_2

レーザー発射後、数フレーム間の間だけは、レーザーのしっぽはプレイヤーの位置に合わせるみたいな処理をいれて回避しないといけないと思われます。このあたり対処コードを入れるかは検討中です。

 

見た目訳が分からなくなる

画面を派手にしたいということで、いっぱいホーミングレーザーを出したいと思ってテストしたのですが、派手になるものの、画面をみて一瞬訳が分からなくなるという現象が発生します。静止画サンプルの場合、たった32本のレーザーを出しているだけで訳が分かりません。さらに100本ぐらい追加してのテストも行った、本当に訳がわからない状態になりました。たぶん人間が一度に把握できる本数は6~8本ぐらいだではないか思います。

でも、逆に、超強力ショット時に自機を無敵か敵弾を消してしまい、大量のレーザーを放出してとにかく思い切り派手にして画面上の敵を一定期間総攻撃するような演出もアリかなとも思い始めてます。

シューターと言われる人達にはなんだこのシステムとかバカにされそうですが、インディーズゲームとして考えたら、それぐらいバカっぽくても良いのではないかと思います。上で書いた2Dシューティングゲームの仕様に関してと話が繋がってきました。

このあたりも含めて2Dシューティングゲームの仕様も、もう少し考えたいと思います。



P.S.
文章が下手すぎてすみません。主語とか省略することが多いので、翻訳したときに訳が全然違うことになったりします…。今後は気を付けたいと思います。

0 件のコメント:

コメントを投稿