前提・実現したいこと
PlayerのHP(fillAmount)が0になった瞬間にPlayerのgameObjectを破壊し、GameOverシーンに移行させたい。
発生している問題・エラーメッセージ
Playerの体力(fillAmount)が0になってもGameOverシーンに移行せず、体力0のままゲームが続行された。
エラーメッセージ
表示されない
該当のソースコード
C#
1ソースコード 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEngine.SceneManagement; 7 8public class GameDirector : MonoBehaviour 9{ 10 public GameObject hpGauge; 11 float fillAmount; 12 void Start() 13 { 14 this.hpGauge = GameObject.Find("hpGauge"); 15 fillAmount = 1.0f; 16 } 17 18 public void DecreaseHp() 19 { 20 this.hpGauge.GetComponent<Image>().fillAmount -= 0.1f; 21 if(fillAmount <= 0) 22 { 23 Destroy(gameObject); 24 Invoke("GoToGameOver", 1.0f); 25 } 26 } 27 void GoToGameOver() 28 { 29 SceneManager.LoadScene("GameOver"); 30 } 31}
試したこと
GameOverシーンを作成して、ネットの指示通りにBuildsettingsにて2つのシーンを設定した。しかしGameOverシーンに移行することはなかった。
補足情報(FW/ツールのバージョンなど)
Unity 2019.2.14f1 Personal
アメリカでは、あなたがネットに指示を出す。
ソビエトロシアでは、ネットがあなたを指示する!
言いたかっただけです。
this.hpGauge.GetComponent<Image>().fillAmount -= 0.1f;
if(fillAmount <= 0)
この2行が気になりました。
すぐ上の行ではthis.hpGauge.GetComponent<Image>().fillAmountとしていて、
その一行下で、fillAmountとしている理由はなに?
すいません、初心者なもので自分でも曖昧なんです
自分の解釈としましてはこのhpGaugeのfillAmountをGetComponentにて数値化させた、と考えているのですが…
もし間違っていましたら、ご教授していただけると幸いです。
横から失礼します。あくまでGetComponentで参照しているのは、"ImageコンポーネントのfillAmount"です。ifの中で比較しているfillAmountは"GameDirectorクラスで宣言したfillAmount"なので、名前は同じでもその2つは別の物です。
「this.hpGauge.GetComponent<Image>().fillAmount -= 0.1f;」で行っているのは前者のImageコンポーネントのfillAmountに対してなので、後者であるif内の変数fillAmountの値は変化することは無く、同時にif条件も満たすことは無いという感じでしょうか。
参考にImageコンポーネントのリファレンスを下記に貼っておきます。Imageコンポーネントが持っている変数もそこで確認出来るかと思います。
https://docs.unity3d.com/ja/2018.4/ScriptReference/UI.Image.html
ありがとうございます!
回答1件
あなたの回答
tips
プレビュー