Unity Score不会增加

时间:2015-12-19 16:49:16

标签: c# unity3d unity5

public static int score;        // The player's score.
Text text;                      // Reference to the Text component.
void Awake ()
{
    // Set up the reference.
    text = GetComponent <Text> ();  
    score = 0;
}
void Update ()
{
    // Set the displayed text to be the word "Score" followed by the score value.
    text.text = "Score: " + score;
}

这是分数经理课,我需要增加分数,但分数始终为零

public void decrease() {
    if (current () > 1)
        tm.text = tm.text.Remove (tm.text.Length - 1);
    else {
        ScoreManager1.score+=scorevalue;
        Destroy (transform.parent.gameObject);
    }
}

这段代码就是增加分数 我创建了一个画布,想要改变得分属于画布的文本  canvas文本有scoremanager1脚本

2 个答案:

答案 0 :(得分:0)

对于面向对象编程的最佳实践,您不应公开公开您的分数变量。这是因为您无法控制可以设置的值。例如;如果你公开了一个公共类并且将它的值设置为某些东西,在大多数情况下你会想要禁止null值,因为对该类的所有后续操作都将返回NullReferenceException。

但是,对于您要实现的目标,您可以使用附加静态方法的类。如下所示,分数和文本值是静态存储的,文本的值是在Awake上获得的。然后,在设置文本字段的文本属性之前,我们使用静态方法AddScore来设置得分值(将其值限制为0和整数的最大值)。

public class ScoreManager : MonoBehaviour
{
    private static  int     m_score;
    private static  Text    m_text;

    public void Awake()
    {
        m_text  = GetComponent<Text>();
        AddScore(0);
    }

    public static void AddScore(int p_score)
    {
        m_score = Mathf.Clamp(m_score + p_score, 0, int.MaxValue);
        m_text.text = "Score: " + m_score;
    }
}

同样,您可以为SetScore,ResetScore以及您需要的任何其他功能添加更多静态方法。

希望这对一些人有所帮助,如果想要稍微不同的方法,你也可以看看static classes versus singletons

答案 1 :(得分:0)

您可以使用PlayerPrefs来确保保存分数。 Playerprefs用于将数据(字符串,整数等)保存在内部设备中。 根据您的情况,应该是这样。

  public void Start(){

                PlayerPrefs.SetInt("Score", 0);
                // Set up the reference.
                m_text  = GetComponent<Text>();
                m_score = PlayerPrefs.GetInt("Score",0);
            }
  public static void AddScore(int p_score)
    {

        m_score = Mathf.Clamp(m_score + p_score, 0, int.MaxValue);
        m_text.text = "Score: " + m_score;
        PlayerPrefs.SetInt("Score", m_score);

    }