分数不会重置

时间:2017-07-19 19:01:42

标签: c# unity3d

当我的玩家死亡时,分数继续并且不会重置,它将继续前一个会话的分数。一旦玩家死亡,我想重置为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;
    }
}

播放器脚本:

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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

只要您的static组件验证了死亡条件,就需要修改ScoreScript内的Player变量。

从消息来源来看,它看起来像是这条线:

if (col.tag != currentColor)

表示游戏结束。如果是这种情况,您需要在ScoreScript.score语句后引用if并将此静态变量的值设置为0以在死亡时重置分数。

答案 1 :(得分:0)

看起来scoreValue是一个静态变量,这意味着它是全局维护而不是ScoreScript行为的实例化。

首先,我会将scoreValue更改为不是静态的。然后,就像你有RigidBody2D之类的组件一样,我会在你的播放器中添加对ScoreScript的公共引用,将该对象拖到Unity编辑器中的那个字段,然后每当进行更改时scoreValue,使用您对ScoreScript的新本地参考。 (所以,scoreScript而不是ScoreScript)。

与所有行为一样,ScoreScript将在场景重置时重建,这意味着它将从0开始。它现在没有重新启动,因为加载新场景只是重新创建对象,它不会重新启动整个脚本环境以及全局静态变量。