(Unity)敵が一定間隔で砲弾を発射する方法(UpdateまたはInvokeRepeating)

(1)下準備(弾の設定)

  • Sphereオブジェクトを1つ作成
  • 名前を「Shell」に変更
  • 大きさ、色は自由に設定
  • 「Rigidbody」を追加(重要)
  • 「Use Gravity」のチェックを外す(これでゆっくりでもまっすぐ飛ぶようになります)
  • Shellを「プレハブ化」したら、HierarchyにあるShellオブジェクトは削除

 

(2)下準備(発射台の設定)

  • 新規にCreate Emptyオブジェクトを作成
  • 名前を「EnemyShot」に変更
  • 場所は自由に設定
  • これが発射台で、弾はここから発射されます。

 

(3)スクリプトの作成(その1)

<Update関数の特性を活用する方法>

  • 新規にC#スクリプトを作成
  • 名前を「EnemyShot」に変更
  • 下記のコードを書いてチェック

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyShot : MonoBehaviour
{
    public GameObject shellPrefab;
    public AudioClip sound;
    private int count;

    void Update()
    {
        count += 1;

        // (ポイント)
        // 60フレームごとに砲弾を発射する
        if(count % 60 == 0)
        {
            GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity);
            Rigidbody shellRb = shell.GetComponent<Rigidbody>();

            // 弾速は自由に設定
            shellRb.AddForce(transform.forward * 500);

            // 発射音を出す
            AudioSource.PlayClipAtPoint(sound, transform.position);

            // 5秒後に砲弾を破壊する
            Destroy(shell, 5.0f);
        }
    }
}

 

(4)設定

  • スクリプトを発射台のオブジェクトに追加
  • 「プレハブ」と「効果音」を設定

 

  • 設定が完了したらゲーム再生
  • 一定間隔で砲弾が発射されれば成功です。

 

(5)スクリプトの作成(その2)

<InvokeRepeatingメソッドを活用する方法>

  • 新規にC#スクリプトを作成
  • 名前を「EnemyShot2」に変更
  • 下記のコードを書いてチェック

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyShot2 : MonoBehaviour
{
    public GameObject shellPrefab;
    public AudioClip sound;

    void Start()
    {
        // 指定したメソッドを、指定した時間(単位;秒)から、指定した間隔(単位;秒)で繰り返し実行する。
        InvokeRepeating("Shot", 0f, 1f);
    }

    void Shot()
    {
        GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity);
        Rigidbody shellRb = shell.GetComponent<Rigidbody>();

        // 弾速は自由に設定
        shellRb.AddForce(transform.forward * 500);

        // 発射音を出す
        AudioSource.PlayClipAtPoint(sound, transform.position);

        // 5秒後に砲弾を破壊する
        Destroy(shell, 5.0f);
    }
}

(6)設定

  • スクリプトを発射台のオブジェクトに追加
  • 「プレハブ」と「効果音」を設定
  • 「EnemyShot」コンポーネントは「オフ」にする(ポイント)

 

  • 設定が完了したらゲーム再生
  • 一定間隔で砲弾が発射されれば成功です。