前提・実現したいこと
プレイヤーのHPが100(満タン)のとき、回復アイテムを拾えないようにしたい
要望
現状、プレイヤーのHP値が100(満タン)の状態でも、回復アイテムを拾えてしまう状態なので、
取得条件を与えたいです。
当方が思いつくのは、回復アイテムのコリジョンを一時的に無効化すること、ですが、それは間違ってますか?
<条件>
もし、プレイヤーHP値が100なら、回復アイテムのコリジョンを無効化
上記を行いたいのですが、どのようにコードを書けばいいのか、詳しい方教えてくださいますよう
お願いいたします。下記は回復アイテムのスクリプトと、プレイヤーのスクリプトです。
海外質問サイト含め、情報を調べても解決策が見つからないので、助言等お願い申し上げます。
回復アイテムのソースコード
C#
1public class HPItem : MonoBehaviour 2{ 3 4 public FPSController fPSController; 5 //回復力をrewardに割り当てる 6 public int reward = 100; 7 //効果音用 8 public AudioClip getSound; 9 //エフェクト用 10 public GameObject effectPrefab; 11 /// <summary> 12 /// 衝突した時 13 /// </summary> 14 /// <param name="collision"></param> 15 16 [SerializeField] 17 /// 自動回転させる変数 18 public Vector3 speed; 19 20 void Start() 21 { 22 // 「Player」についている「FPSController」スクリプトにアクセスする。 23 fPSController = GameObject.Find("Player").GetComponent<FPSController>(); 24 } 25 26 void OnTriggerEnter(Collider other) 27 { 28 // 衝突した相手にPlayerタグが付いているとき 29 if (other.gameObject.tag == "Player") 30 { 31 // 効果音がなった後、消える 32 AudioSource.PlayClipAtPoint(getSound,transform.position); 33 Destroy(gameObject, getSound.length); 34 35 // プレーヤーのHPを自分が指定した量だけ回復させる 36 fPSController.AddHP(reward); 37 38 // エフェクトを発生させる 39 GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity); 40 Destroy(effect, 0.5f); 41 } 42 43 if(playerHP >100) 44 GetComponent<Collider>().enabled = false; 45 } 46 47 //自動回転し続ける 48 public void LateUpdate() 49 { 50 transform.Rotate(speed, Space.Self); 51 } 52 53}
プレイヤーのソースコード(回復アイテムとコネクトしてる部分のみ抜粋)
C#
1// (HP回復アイテム) 2 public void AddHP(int amount) 3 { 4 // 「amount」分だけHPを回復させる 5 playerHP += amount; 6 7 // 最大HP以上には回復しないようにする。 8 if (playerHP > 100) 9 { 10 playerHP = 100; 11 } 12 13 }
なぜコリジョンを無効化しなければならないのか?
それが理解できない