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
脚本
答案 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);
}