Unity事例ノート

UNITY

弾幕のように全方向へ発射するしくみ

回転した方向へ向けて、ボールを発射できる仕組みを考えてみます。

3Dゲームでの弾幕、全方位に向けての発射等々、活用できるシーンはたくさんありますね。

クォータ二オンからオイラー角への変換についても、この制作で触れています。

関連記事:
一度に複数のオブジェクトを発射
プレーヤーの向いている方向に発射
全方位に向けてランダム発射
Instantiateでオブジェクトの角度を変える

ボールを用意する

この例では、Sphereのプレハブを用意し、リジッドボディとSphereMove.csを付けています。

Use Gravityのチェックを外しています。

SphereMove.csは以下のように書いています。

発射元オブジェクトの回転

続いて、発射元となるCubeオブジェクトを作成しました。

GameManager.csをつくり、Cubeに追加します。

GameManager.csは以下のように書きました。

Ballのフィールドには、Sphereプレハブを入れます。

プレイしてみましょう。

10°ずつ回転しながら、0.3秒おきに発射するつもりが、突然予期しない方向へと進んでいきます。

CubeのTransformをスローで見てみましょう。

kを10ずつ増やしているにもかかわらず、回転は「10、30、60、100」のような増え方をしていることがわかります。

これは、Instantiateの回転角がクォータニオンで表現されているためです。

オイラー角へ変換して生成

ここで、 クォータニオン → オイラー角への変換メソッドが必要になります。

もう一度、GameManager.csを編集しましょう。

動きが見やすいように、kを30に変えています。

ゲームプレイしてみましょう。

回転しながら、全方位へ発射ができています。

オイラー角に変換したものを入れることで、回転方向へ生成することができます。

関連記事:
一度に複数のオブジェクトを発射
プレーヤーの向いている方向に発射
全方位に向けてランダム発射
Instantiateでオブジェクトの角度を変える

SCHOOL教室案内