2017-07-19 4 views
0

プレイヤーが死亡した場合、スコアが継続されリセットされない場合、スコアは前のセッションから継続されます。あなたが変更する必要がスコアはリセットされません

using UnityEngine; 
using UnityEngine.SceneManagement; 

public class Player : MonoBehaviour { 

    public float jumpForce = 10f; 

    public Rigidbody2D rb; 
    public SpriteRenderer sr; 

    public string currentColor; 

    public Color colorCyan; 
    public Color colorYellow; 
    public Color colorMagenta; 
    public Color colorPink; 

    void Start() 
    { 
     SetRandomColor(); 
    } 

    // Update is called once per frame 
    void Update() { 
     if (Input.GetButtonDown("Jump") || Input.GetMouseButtonDown(0)) 
     { 
      rb.velocity = Vector2.up * jumpForce; 
     } 
    } 

    void OnTriggerEnter2D (Collider2D col) 
    { 
     if (col.tag == "ColorChanger") 
     { 
      ScoreScript.scoreValue += 1; 
      SetRandomColor(); 
      Destroy(col.gameObject); 
      return; 
     } 

     if (col.tag != currentColor) 
     { 
      Debug.Log("GAME OVER!"); 
      SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 
     } 
    } 

    void SetRandomColor() 
    { 
     int index = Random.Range(0, 4); 

     switch (index) 
     { 
      case 0: 
       currentColor = "Cyan"; 
       sr.color = colorCyan; 
       break; 
      case 1: 
       currentColor = "Yellow"; 
       sr.color = colorYellow; 
       break; 
      case 2: 
       currentColor = "Magenta"; 
       sr.color = colorMagenta; 
       break; 
      case 3: 
       currentColor = "Pink"; 
       sr.color = colorPink; 
       break; 
     } 
    } 
} 
+1

「scoreValue」を非静的にしてみましたか? – UnholySheep

+0

私はそれを非静的にする方法はどうでしょうか?チュートリアルを見つけることができません:S – ROOT

+0

@ROOT:[この質問を参照](https://stackoverflow.com/questions/25930919/accessing-a-variable-from-another-script-c-sharp) – Draco18s

答えて

0

scoreValueは静的変数です。つまり、ScoreScriptの動作のインスタンス化ではなく、グローバルに維持されています。

まず、scoreValueを静的でないものに変更します。次に、RigidBody2Dなどのコンポーネントの場合と同様に、プレイヤーのScoreScriptへのパブリックリファレンスを追加し、そのオブジェクトをUnityエディタのそのフィールドにドラッグし、scoreValueに変更するたびに、新しいローカル参照を使用します。 ScoreScript。 (だからScoreScriptではなくscoreScript)。

ScoreScriptは、シーンがリセットされたときに再構築されるため、0から開始されます。新しいシーンを読み込むだけでオブジェクトを再作成するため、スクリプト全体を再起動しないため再起動しませんグローバルな静的変数とともに使用します。

0

using System.Collections; 
using UnityEngine.UI; 
using System.Collections.Generic; 
using UnityEngine; 

public class ScoreScript : MonoBehaviour { 

    public static int scoreValue = 0; 
    Text score; 

    // Use this for initialization 
    void Start() { 

     score = GetComponent<Text>(); 

    } 

    // Update is called once per frame 
    void Update() { 

     score.text = " " + scoreValue; 
    } 
} 

プレーヤースクリプト:私は、私は2つのスクリプト

スコアスクリプトを追加した、プレイヤーが死ぬ一度戻って0にリセットしたいと思いますPlayerコンポーネントで死亡の条件が確認されると、ScoreScriptの内部にstaticという変数があります。

ソースから判断すると、それはラインのようになります。

if (col.tag != currentColor)

は、ゲームの終わりを意味します。この場合、ifステートメントの後にScoreScript.scoreを参照し、この静的変数の値を0に設定して死亡時にスコアをリセットします。

+0

のようなこの ? ' (col.tag!= currentColor) \t \t { * ScoreScript.scoreValue = 0; * Debug.Log(" GAME OVER! "); \t \t \t SceneManager.LoadScene(SceneManager.GetActiveScene()。buildIndex); \t \t} ' – ROOT

関連する問題