円状に弾を発射したいんだ!

この記事は何

この記事では、弾幕ゲームなどを作る際に使う、等間隔に円状に弾を発射する方法について説明します。三角関数の$sin$と$cos$の定義がわかる方であれば難なく理解できると思います。(定義を理解していたら多くの方はこれを自力で導き出せると思っています。)

記事の最後には動作例もあるので是非見てくださいね。

ご挨拶

みなさんこんにちは。RiG++コーディング課の田きです。調子はいかがでしょうか。私は自身の将来への漠然とした不安に押しつぶされそうになっています。そんな中でもきれいな模様について考えているときは不安から逃避できるので、きれいな模様を描くためのかなり初歩的な話をしていきたいと思います。

今回やる事

この記事では、Unityエンジン上で円状の弾幕を作っていこうと思います。その方法を書いていこうと思います。

登場する変数

弾の数($n$とします)

以上!

実際に考察してみましょう

申し訳程度のイラスト

$n$個の弾を円状に発射することを考えます。この時、弾の角度の間隔として、 $\frac {360°}{n}$ であると良いのは直感的にわかります。そのため、以下のようにすると円状に発射することができます。

$弾_i$の速度を$v_i$とします$(0\leqq i<n)$。この時、$ θ_i = \frac {360°}{n}\times i$とすると、 $v_i = (cos θ_i,sin θ_i)$と表せます。

上の内容が言っているのは、$i$番目の弾は、$i$の数と$n$の数に応じていい感じに回転した方向に発射してね、という内容です。これは、プログラムであればfor文で簡単に表すことができます。弾の速度についても、Unityであれば物理演算機能があるのでそれを用いれば簡単に実現することができます。

まとめ

極めて簡単に円状に弾を発射することができました。$sin$や$cos$も途中で出てきましたが、定義以上に難しい使い方はしませんでした。

円状に弾を発射するのは弾幕の基本中の基本です。今回示した式を少しいじるだけでもバラエティに富んだ弾を発射することができます。例えば、$v_i$に$i$を掛けて、方向毎に弾の速さを変えてみるとか、$θ$の値に少しだけランダムな値を足して完全な円状ではなくするとか、$360°$ではなく$180°$でやってみるとか、様々な工夫ができると思います。

弾幕を楽しんでくださいね。

動作例

拙作ではありますが、以下のようなものが作れます。

音が出ます!!!!!

上の動画では、ただ同じ向きに発射するのではなく、1グループの弾に足して一定の角度を足すことで、すべての弾が同じ方向に飛ばない工夫がされています。

また、動画終盤にちらっとだけ登場する渦巻状の弾幕も、円状に発射するものを工夫することで実現できます。

コメントを残す

CAPTCHA