(Unity)バッドアイテムを取得すると敵の砲弾発射間隔が一定時間短くなる

(スクリプト1)

  • 敵の砲弾発射スクリプトの中に、外部から発射間隔を操作できるメソッドを準備する。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EnemyShotShell : MonoBehaviour
{
    public float shotSpeed;
    public GameObject EnemyShellPrefab;
    public AudioClip shotsound;
    private int interval;
    public float stoptimer = 5.0f;
    public Text stopLabel;

    // ★追加
    private int shotInterval = 60;

    void Update()
    {
        interval += 1;
        stoptimer -= Time.deltaTime;
        if (stoptimer < 0)
        {
            stoptimer = 0;
        }
        stopLabel.text = "" + stoptimer.ToString("0");

        // ★改良
        // 発射間隔を変数にする。
        if (interval % shotInterval == 0 && stoptimer <= 0)
        {
            GameObject EnemyShell = Instantiate(EnemyShellPrefab, transform.position, Quaternion.identity);
            Rigidbody EnemyShellRb = EnemyShell.GetComponent<Rigidbody>();
            EnemyShellRb.AddForce(transform.forward * shotSpeed);
            AudioSource.PlayClipAtPoint(shotsound, transform.position);
            Destroy(EnemyShell, 3.0f);
        }
    }

    public void AddStopTimer(float amount)
    {
        stoptimer += amount;
        stopLabel.text = "" + stoptimer.ToString("0");
    }

    // ★追加
    // shotIntervalの数値を変更するメソッド
    public void SetInterval(int value)
    {
        shotInterval = value;
    }
}

(スクリプト2)

  • アイテムオブジェクトに追加するスクリプトを作成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyShotFastItem : MonoBehaviour
{
    public GameObject[] enemyShotShell;

    private void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.CompareTag("Player"))
        {
            this.gameObject.SetActive(false);

            foreach(GameObject g in enemyShotShell)
            {
                g.GetComponen<EnemyShotShell>().SetInterval(5);

                // 5秒後に発射間隔を元に戻す。
                Invoke("Reset", 5);
            }
        }
    }

    private void Reset()
    {
        foreach (GameObject g in enemyShotShell)
        {
            g.GetComponent<EnemyShotShell>().SetInterval(60);
        }
    }
}

(実行結果)

  • 一定時間だけ、敵の砲弾の発射間隔が短くなれば成功