(スクリプト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);
}
}
}
(実行結果)
- 一定時間だけ、敵の砲弾の発射間隔が短くなれば成功