どうも、最近ますます腰痛がひどい右近です。

 

今回は前回予告していたとおり、「誘導ミサイル」の作り方を紹介したいと思います。

(前回の記事はこちら)

 

 

※例によって「神動画」を参考にしていますが、私の残念なお頭では「バネトルク」なるものが理解できなかったので、

若干、というかだいぶ動画とは違う実装方法に仕上がっております。

(神動画はこちら)


※使用バージョン:Unity 2018.2.9f1

 

 

スポンサーリンク

1. 今回紹介する「誘導ミサイル」の仕様

 

今回紹介する「誘導ミサイル」の仕様は以下の通りです。

 

・仕組みとしては前回紹介した「ホーミングレーザー」と同じ。

・当たるまで追尾しない(一回ターゲットを通り過ぎるとそのままどこかへ飛んでいく)。

・正面となる軸を指定する必要がある(後述)

 

 

一口に「誘導ミサイル」といっても色々な種類があると思うので、一応仕様を書いてみました。

 

 

2.誘導ミサイルの作り方

 

ここからは、それはもうザックリと作り方を紹介していきます。

 

ザックリ作業手順

 

1.「ターゲット」と「ミサイル」となるオブジェクトを設置。

2.ミサイル用スクリプトを作成し、ミサイルにアタッチ。ついでにRigidbodyもアタッチ。

 

 

1.「ターゲット」と「ミサイル」となるオブジェクトを設置

 

まずは、適当な位置に「ターゲット」と「ミサイル」となるオブジェクトを設置します。

 

「ターゲット」は3Dオブジェクトの「Cube」で名前を「mato」に、

「ミサイル」は3Dオブジェクトの「Capsule」で名前を「HomingMissile」とします。

誘導ミサイル01-min

 

 

2.ミサイル用スクリプトを作成し、ミサイルにアタッチ。ついでにRigidbodyもアタッチ。

 

次に「HomingMissile」という名前でC#スクリプトを作成します。

誘導ミサイル02-min

 

↓のコードをマルコピしてください。

 

 

少しクセのある仕上がりとなっているので、スクリプトの説明をさせてください。

(update関数内の処理と一部変数については前回紹介した「ホーミングレーザー」と同じなので割愛します)

 

まずは↓の部分についてです。

この2つの変数はどの軸を正面としてターゲットに突っ込んでいくか決めるための変数になります。

(軸とはx軸、y軸、z軸のことです。Scene画面でオブジェクトを選択すると表示される赤、緑、青の矢印と言ったらほうがわかりやすいでしょうか?)

「Axis」にはインスペクター上で「x、y、z」のどれかを入力し、入力した軸を正面にぶっ飛んでいきます。

「frontAxis」には後で詳しく説明します。

 

なぜ、正面とする軸を決める必要があるのかというと、軸を決めないとロケットのように飛んでいかないからです!

とりあえずこれを見てください。

誘導ミサイル1

軸を決めずに飛ばすと、おそらくz軸を正面にして飛んでいくことだろうと思います。

(まあ、書き方にもよりますが・・・。)

しかし、見てもらったのでわかると思いますが、ロケットならz軸じゃなくてy軸を正面に飛んでほしいですよね!

こんなふうに!

誘導ミサイル2

 

軸を自由に決められると、アセットストアからもってきたミサイルのオブジェクトの正面がどの軸だろうと問題ありません!

 

 

ということで、続いて↓の部分の説明です。

 

 

ちょっとあれなので、すごくザックリいきます。

まず最初のif文。

これは、誘導ミサイルがいつまでもターゲットの方向を向かないよう、

着弾時間を過ぎたらターゲットの方向を向く処理を行わないようにするためのif文です。

つまり、if文の中ではターゲットの方向に向ける処理を行っています。

 

 

具体的にどんな処理を行っているかというと、まず自分とターゲットとの差分を計算し、適当な変数にぶち込んでいます。

その後、switch文で「Axis」の値によって、「frontAxis」に何を代入するかを決めています。

(ちなみに、「Axis」の値が「x、y、z」のどれでもないときはログで気づけるようにはなっているはずです。)

 

「frontAxis」の値を決めた後は、「GetRotMat」関数を呼び出したときの戻り値に、

「transform.rotation」を掛けた値を「transform.rotation」に代入することによって、

いい感じに指定した軸を正面としてターゲットの方向を向くらしいです。

(この処理は↓のサイト様を参考にさせていただきました。ありがとうございます)

UnityのLookAt関数を任意の方向に行う

 

 

後は、移動処理を行っているだけになります。

ザックリ説明終わり。

 

 

次は、今作った「HomingMissile」スクリプトを「HomingMissile」オブジェクトにアタッチします。

※「Target」には的となるオブジェクトを、「Axis」には正面としたい軸を「x、y、z」で指定してください

誘導ミサイル03-min

 

 

そして、「Rigidbody」もアタッチしましょう。

※「Use Gravity」のチェックは外します。

誘導ミサイル04-min

 

 

以上で誘導ミサイルを飛ばす準備は整いました。

後は実行して飛ばしましょう!

 

 

3.おわりに

 

今回はだいぶザックリとですが、誘導ミサイルの作り方を紹介しました。

もし、聞きたいことがある人はお気軽にコメントしてください。

答えられる範囲で答えさせていただきます。

 

 

それでは、最後まで見ていただきありがとうございました。

 

 

 

スポンサーリンク
おすすめの記事