【Unity】スペースキーで弾を発射する大砲(GameObject)を作成する方法

2021年5月9日Unity

スポンサーリンク

スペースキーで弾を発射する大砲(GameObject)を作る方法を紹介します。

完成動作

スペースキーを押下すると弾が発射される。

大砲(GameObject)を作成

1.例として以下のように組み合わせて砲台を作ります。
 親:Launcher(赤いCube)
 子:Muzzle(黄色いCylinder)Z軸の方向を向くようにする。
 子:FiringPoint(空のGameObject)Muzzleの先端らへんに作成する。下の2番目の画像を参照

FiringPointの場所

弾を作成

1.Sphereを作成して、"Bullet"という名前に変更する。
 (わかりやすいようにMaterialで青色にしてます。弾の大きさは良い感じに変える。)

2."Bullet"にRigidBodyを付ける。(弾が飛ぶ動作をRigidBodyを使って実装するため。)

弾をPrefab化

1.作成した"Bullet"をAssetsにドラックアンドドロップして、Prefab化する。

2.Hierarchy欄のBulletを削除(or非表示)にする。

※非表示の場合は以下のように、チェックボックスの✔を外す。

※今回は削除した。

スペースキーで弾を発射するスクリプトを作成

1.FireBullet.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;

public class FireBullet : MonoBehaviour
{
    [SerializeField]
    [Tooltip("弾の発射場所")]
    private GameObject firingPoint;

    [SerializeField]
    [Tooltip("弾")]
    private GameObject bullet;

    [SerializeField]
    [Tooltip("弾の速さ")]
    private float speed = 30f;

    // Update is called once per frame
    void Update()
    {
        // スペースキーが押されたかを判定
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 弾を発射する
            LauncherShot();
        }
    }

    /// <summary>
	/// 弾の発射
	/// </summary>
    private void LauncherShot()
    {
        // 弾を発射する場所を取得
        Vector3 bulletPosition = firingPoint.transform.position;
        // 上で取得した場所に、"bullet"のPrefabを出現させる
        GameObject newBall = Instantiate(bullet, bulletPosition, transform.rotation);
        // 出現させたボールのforward(z軸方向)
        Vector3 direction = newBall.transform.forward;
        // 弾の発射方向にnewBallのz方向(ローカル座標)を入れ、弾オブジェクトのrigidbodyに衝撃力を加える
        newBall.GetComponent<Rigidbody>().AddForce(direction * speed, ForceMode.Impulse);
        // 出現させたボールの名前を"bullet"に変更
        newBall.name = bullet.name;
        // 出現させたボールを0.8秒後に消す
        Destroy(newBall, 0.8f);
    }
}

スクリプトを弾を発射させたいブロック(GameObject)にアタッチ

1.FireBullet.csを弾を発射させたいブロック(Launcherオブジェクト)にアタッチする。

アタッチ後のInspectorタブ

弾を発射させたいブロック(GameObject)にアタッチしたFireBulletの項目に値を設定

1.LauncherオブジェクトのInspectorタブの"Fire Bullet"コンポーネントの"Firing Point"にHierarchy欄のFiringPointオブジェクトをドラックアンドドロップして設定する。

2.LauncherオブジェクトのInspectorタブの"Fire Bullet"コンポーネントの"Bullet"にAssets欄の"Bullet"Prefabをドラックアンドドロップして設定する。

完成

これでスペースキーを押すと、弾が発射されるようになる。

Unity

Posted by ton