アイテムシステムの作成③(連射アイテム)

連射モード
using UnityEngine;
public class AttackController : MonoBehaviour
{
public GameObject missilePrefab;
public GameObject firePoint;
public AudioClip sound;
private float timer;
private float interval = 0.1f;
private enum AttackState
{
Normal,
RapidFire
}
private AttackState aState;
void Start()
{
// ★変更
// ゲームスタート時はノーマルモードで
aState = AttackState.Normal;
}
void Update()
{
if (aState == AttackState.Normal)
{
NormalShoot();
}
else if (aState == AttackState.RapidFire)
{
RapidShoot();
}
}
void NormalShoot()
{
if (InputManager.isa.Player.Shot.triggered)
{
AudioSource.PlayClipAtPoint(sound, Camera.main.transform.position);
GameObject missile = Instantiate(missilePrefab, firePoint.transform.position, Quaternion.identity);
Destroy(missile, 5.0f);
}
}
void RapidShoot()
{
if (InputManager.isa.Player.Shot.IsPressed())
{
timer += Time.deltaTime;
if (timer > interval)
{
AudioSource.PlayClipAtPoint(sound, Camera.main.transform.position);
GameObject missile = Instantiate(missilePrefab, firePoint.transform.position, Quaternion.identity);
Destroy(missile, 5.0f);
timer = 0;
}
}
}
// ★追加
// 外部から連射モードをオンにする
public void RapidON()
{
aState = AttackState.RapidFire;
// 5秒後に連射モードをオフにする
Invoke(nameof(RapidOFF), 5f);
}
void RapidOFF()
{
aState = AttackState.Normal;
}
}
連射モードの発動
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ItemManager : MonoBehaviour
{
public ItemDatabase itemDatabase;
public Image itemIcon;
public TextMeshProUGUI itemCountLabel;
private int num = 0;
public AudioClip changeSound;
private PlayerHP playerHP;
public AudioClip okSound;
public AudioClip ngSound;
// ★追加
private AttackController attackController;
void Start()
{
itemIcon.sprite = itemDatabase.itemList[num].itemIcon;
UpdateUI();
playerHP = GetComponent<PlayerHP>();
// ★追加
attackController = GetComponent<AttackController>();
}
void Update()
{
if (InputManager.isa.Player.ItemChange.triggered)
{
AudioSource.PlayClipAtPoint(changeSound, Camera.main.transform.position);
num = (num + 1) % itemDatabase.itemList.Count;
itemIcon.sprite = itemDatabase.itemList[num].itemIcon;
UpdateUI();
}
if (InputManager.isa.Player.Item.triggered)
{
if (itemDatabase.itemList[num].itemCount > 0)
{
AudioSource.PlayClipAtPoint(okSound, Camera.main.transform.position);
itemDatabase.itemList[num].itemCount -= 1;
UpdateUI();
string currentItemName = itemDatabase.itemList[num].itemName;
if (currentItemName == "HP")
{
playerHP.AddHP();
}
// ★追加
else if(currentItemName == "RapidFire")
{
attackController.RapidON();
}
}
else
{
AudioSource.PlayClipAtPoint(ngSound, Camera.main.transform.position);
}
}
}
public void UpdateUI()
{
itemCountLabel.text = "" + itemDatabase.itemList[num].itemCount;
}
}


【Unity6版】Danmaku(全20回)
他のコースを見る
連射モード
using UnityEngine;
public class AttackController : MonoBehaviour
{
public GameObject missilePrefab;
public GameObject firePoint;
public AudioClip sound;
private float timer;
private float interval = 0.1f;
private enum AttackState
{
Normal,
RapidFire
}
private AttackState aState;
void Start()
{
// ★変更
// ゲームスタート時はノーマルモードで
aState = AttackState.Normal;
}
void Update()
{
if (aState == AttackState.Normal)
{
NormalShoot();
}
else if (aState == AttackState.RapidFire)
{
RapidShoot();
}
}
void NormalShoot()
{
if (InputManager.isa.Player.Shot.triggered)
{
AudioSource.PlayClipAtPoint(sound, Camera.main.transform.position);
GameObject missile = Instantiate(missilePrefab, firePoint.transform.position, Quaternion.identity);
Destroy(missile, 5.0f);
}
}
void RapidShoot()
{
if (InputManager.isa.Player.Shot.IsPressed())
{
timer += Time.deltaTime;
if (timer > interval)
{
AudioSource.PlayClipAtPoint(sound, Camera.main.transform.position);
GameObject missile = Instantiate(missilePrefab, firePoint.transform.position, Quaternion.identity);
Destroy(missile, 5.0f);
timer = 0;
}
}
}
// ★追加
// 外部から連射モードをオンにする
public void RapidON()
{
aState = AttackState.RapidFire;
// 5秒後に連射モードをオフにする
Invoke(nameof(RapidOFF), 5f);
}
void RapidOFF()
{
aState = AttackState.Normal;
}
}
連射モードの発動
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ItemManager : MonoBehaviour
{
public ItemDatabase itemDatabase;
public Image itemIcon;
public TextMeshProUGUI itemCountLabel;
private int num = 0;
public AudioClip changeSound;
private PlayerHP playerHP;
public AudioClip okSound;
public AudioClip ngSound;
// ★追加
private AttackController attackController;
void Start()
{
itemIcon.sprite = itemDatabase.itemList[num].itemIcon;
UpdateUI();
playerHP = GetComponent<PlayerHP>();
// ★追加
attackController = GetComponent<AttackController>();
}
void Update()
{
if (InputManager.isa.Player.ItemChange.triggered)
{
AudioSource.PlayClipAtPoint(changeSound, Camera.main.transform.position);
num = (num + 1) % itemDatabase.itemList.Count;
itemIcon.sprite = itemDatabase.itemList[num].itemIcon;
UpdateUI();
}
if (InputManager.isa.Player.Item.triggered)
{
if (itemDatabase.itemList[num].itemCount > 0)
{
AudioSource.PlayClipAtPoint(okSound, Camera.main.transform.position);
itemDatabase.itemList[num].itemCount -= 1;
UpdateUI();
string currentItemName = itemDatabase.itemList[num].itemName;
if (currentItemName == "HP")
{
playerHP.AddHP();
}
// ★追加
else if(currentItemName == "RapidFire")
{
attackController.RapidON();
}
}
else
{
AudioSource.PlayClipAtPoint(ngSound, Camera.main.transform.position);
}
}
}
public void UpdateUI()
{
itemCountLabel.text = "" + itemDatabase.itemList[num].itemCount;
}
}


アイテムシステムの作成③(連射アイテム)