前提・実現したいこと
unityでスクロールされてくる木を通り抜ける(フラッピーバード)ゲームを作っています。
木に当たるとゲームオーバーです。
ゲームオーバーになったら木を通過してもスコアが加算されないようにしたいです。
ゲームオーバーになったら木を通過してもスコアが加算されないような機能を
実装中に以下のエラーメッセージが発生しました。
同じような質問を見つけたのですが、よくわかりませんでした。
発生している問題・エラーメッセージ
Assets\Script\ScoreScript.cs(32,14): error CS0103: The name 'gameover' does not exist in the current context
該当のソースコード
C# スコアのコードになります
using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; public class ScoreScript : MonoBehaviour { //------------------ public static int score = 0; //---------------------- void Start() { //------------ if (score > 0) { reset(); } //------------ GetComponent<Text>().text = "SCORE: " + score.ToString(); } //------------------- void reset() { score = 0; } //-------------------- public void ScoreUp(int point) { if (!gameover) { score += point; GetComponent<Text>().text = "SCORE: " + score.ToString(); } } //------------------------------- public static int GetScore() { return score; } //------------------------------- }
C# プレイヤーのコードになります
using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class playerScript3 : MonoBehaviour { public GameObject Score; private Rigidbody2D rb2D; private float jumpForce = 10.0f; private float downForce = -10.0f; private float rightForce = 0.2f; private float leftForce = -0.2f; //GameOverのGUITextを指定 public GameObject GameOverGUI; //gameoverフラグ private bool gameover = false; //Animator変数 private Animator anim; void Start() { rb2D = GetComponent<Rigidbody2D>(); //AnimatorをGetComponentしておく anim = GetComponent("Animator") as Animator; } void Update() { //gameoverフラグがtrueになった時、ジャンプできないようにする if (Input.GetMouseButtonDown(0) && !gameover) { Jump(); } //------------------ if (Input.GetMouseButtonDown(1) && !gameover) { down(); } if(Input.GetKey(KeyCode.D) && !gameover) { right(); } if(Input.GetKey(KeyCode.A) && !gameover) { left(); } //------------------- if (gameover == true) { //アニメーションの切替 anim.SetBool("gameover", true); //GAME OVERのGUIを表示する GameOverGUI.SendMessage("Lose"); } } void Jump() { GetComponent<AudioSource>().Play(); // 効果音を鳴らす rb2D.velocity = new Vector2(rb2D.velocity.x, jumpForce); } //------------------ void down() { rb2D.velocity = new Vector2(rb2D.velocity.x, downForce); } void right() { //rb2D.velocity = new Vector2(rb2D.velocity.rightForce, y); transform.Translate(rightForce, 0, 0); } void left() { //rb2D.velocity = new Vector2(rb2D.velocity.leftForce, y); transform.Translate(leftForce, 0, 0); } //-------------------- void OnTriggerEnter2D(Collider2D col) { Score.SendMessage("ScoreUp", 1); Destroy(col.gameObject); } //Trigger以外の何か障害物に当たった置き、GameOverメソッドを実行 void OnCollisionEnter2D(Collision2D col) { StartCoroutine(GameOver()); } IEnumerator GameOver() { // ゲームオーバーのフラグをtrueにする gameover = true; // マウス連打してたらスコアを見る暇もなくタイトルへ戻ってしまう対策 1秒待機 yield return new WaitForSeconds(1f); // マウスクリックしたらゲームの最初に戻る while (!Input.GetMouseButtonDown(0)) { yield return 0; } //------------------- Application.LoadLevel("result"); //------------------ } }
C# ゲームオーバーのコードになります。
using UnityEngine; using UnityEngine.UI; using System.Collections; public class gameOverScript : MonoBehaviour { void Start() { gameObject.GetComponent<Text>().enabled = false; } public void Lose() { gameObject.GetComponent<Text>().enabled = true; } }
試したこと
scoreScriptにif(!gameover)で判定しようとしたが、できなかった。
補足情報(FW/ツールのバージョンなど)
unity2018.4.17f1を使用しています。
回答2件
あなたの回答
tips
プレビュー