質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

2回答

1371閲覧

プレイヤーのHPが満タンのとき回復アイテムを拾えなくする

AcrossKodez

総合スコア0

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2022/01/06 18:35

編集2022/01/06 20:11

前提・実現したいこと

プレイヤーの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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/01/08 06:47

なぜコリジョンを無効化しなければならないのか? それが理解できない
guest

回答2

0

if(playerHP >100)

GetComponent<Collider>().enabled = false;

って、
if(playerHP >=100)
なんでは。

ひるがえって、
GetComponent<Collider>().enabled = playerHP < 100;
で済みますね

投稿2022/01/06 22:53

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんなかんじ?

public void AddHP(int amount) { if (playerHP+amount <= 100) { playerHP += amount; } else { playerHP = 100; } }

投稿2022/01/06 21:02

takasima20

総合スコア7464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AcrossKodez

2022/01/06 23:00 編集

試してみましたが、うまくいかないようです。 FPSController.cs側で、intゲッター```public int Health => playerHP;```を追加して、 HPItem.cs側の```OnTriggerEnter```内を下記にしました。 ``` void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Player" && other.GetComponent<FPSController>().Health != 100) { AudioSource.PlayClipAtPoint(getSound,transform.position); Destroy(gameObject, getSound.length); fPSController.AddHP(reward); } } ``` すると、HP値100以上の場合、回復アイテムを拾えなくすることはできましたが、今度は、敵からダメージを受けたとき、回復アイテムを拾っても、 回復しなくなってしまいました。 画面UIに、 HPスライダーも使っているのですが、それが原因なのでしょうか。。? 助言いただきたく存じます。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問