ファイブボックス一分間Unity講座アイキャッチ画像
1分間 Unity講座 スペースキーでクローンで作られたミサイルを発射する方法

このブログはUnityの初心者向けに、Untiyの機能の使い方、基本のスクリプトファイルの使い方から応用までをご説明しています。中級以上の方に読んでいただきたい内容も随時更新していますので、お時間がある方、検索でここにアクセスされた方はぜひ立ち寄っていってください。

前回の動画「ランダムな座標へ複数のプレハブを生成する方法」に引き続き、クローンを使ってオブジェクトを作成する方法をご紹介します。今回はスペースキーなど、任意のキーを押したときに、用意したミサイルのクローンからインスタンスを生成、さらにRigidbodyに力を与え前方に飛ばすという仕組みを作成します。

下の動画は「ファイブボックス 一分間Unity講座 ランダムな座標へプレハブ生成」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください。

素材の準備

ミサイルのプレハブ

ヒエラルキー上で  3DObject ⇒ Sphere で球体を配置し、ミサイルの素材を作ります。

サンプルではInspectorから、以下のように調整しました。

■ 名前:Bullet

■ Transform Scale:x:0.3 , y:0.3 , z:0.3

■ Material:赤色のMaterialをセット

さらに Rigidbody コンポーネントを追加しておきましょう。

Sphereを配置しInspectorで指定

素材が出来たら、Assetsにドラッグ&ドロップでプレハブ化します。

ヒエラルキーの素材は不要なので、削除しておきます。

Assetフォルダにドラッグ&ドロップでプレハブ化

砲台

ミサイルが発射される場所になります。 ヒエラルキー上で  3DObject ⇒ Cylinder で円柱状のオブジェクトを配置し、inspectorから以下のように指定します。

■ 名前:Battery(砲台の意味)

■ Transform

Position: x:0 , y:0 , z:-8.5

Rotation:x:50 , y:0 , z:0 (若干上方向を向かせる)

Scale: x:0.3 , y:0.3 , z:0.3

■ CapsulCollider:アクティブのチェックを外し、無効化にします。

  ※Burretとの衝突を防ぐため

その他、色など任意で調整してください。

Sylinderを配置し、inspectorで調整

ミサイル発射のプログラム

作成済みの、オブジェクトを定期的に生成するスクリプトファイルを確認します。

[SerializeField] GameObject cubePrefab; //cubeのプレハブ
float timer;                            //経過時間を管理する変数

void Update()
{
    timer += Time.deltaTime;        //timerに経過時間を加算
    if (timer > 1.0f)               //timerが1秒を超えたら
    {
        //Vector3型の変数:pos を宣言、半径5の球体内のランダムな場所を指定
        Vector3 pos = Random.insideUnitSphere * 5.0f;
        //cubePrefabをposの座標に、回転無しで生成
        Instantiate(cubePrefab, pos, Quaternion.identity);
        timer = 0;                  //timerを0リセット
    }
}

このプログラムに追記していきましょう。

今回新たに使用するGameObject型の変数は以下の2つです。

  • bulletPrefab – 発射する弾のプレハブ
  • battery – 砲台のオブジェクト

ともに[SerializeField]を宣言しInspectorから指定できるようにします。

[SerializeField] GameObject bulletPrefab, battery;    //カンマで区切って2つの変数を宣言

Update関数では、スペースキーが押されたときにBulletのプレハブを生成し、そのRigidbodyコンポーネントAddForceメソッドを使って前向きの力を加え、前方に飛んでいくようにします。

さらにDestroyメソッドを使って、作成したオブジェクトを3秒後に削除します。

if (Input.GetKeyDown(KeyCode.Space))        //スペースキーが押されたとき
{
    //bulletPrefabのPrefabを生成
    GameObject bullet = Instantiate(bulletPrefab, 
             battery.transform.position, Quaternion.identity);
    //Rigidbodyを取得し、AddForceMethodで前向きの力を加える
    bullet.GetComponent<Rigidbody>().AddForce(transform.forward * 2000);
  	Destroy(bullet,3.0f);       //3秒後に削除
}

Instantiateメソッド はクローンからインスタンスを生成する関数です。前回の記事で詳しく説明しているので、そちらもご参照ください。

上のサンプルでは前向きTransform.forwardに2,000の力を加えていますが、任意の力を与えてみてください。

最後は[SerializeField]で宣言した変数、bulletPrefab、および battery にそれぞれ Burret と Cylinder をAssignします。

変数にオブジェクトをAssign

これで準備はOKです。起動して正しくミサイルが発射されるのを確認しておきましょう。


ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP