[英]Issue with score in game with unity c#
在我的游戏中,玩家必须收集硬币。 问题是当玩家死亡并开始新游戏时,硬币的数量不会重置。 例如:
开始新游戏并收集 15 个硬币,然后死亡
开始新游戏和硬币数量我设置为 15,而不是 0
我该如何解决?
用于在屏幕上显示乐谱的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Score : MonoBehaviour
{
Coin coin;
void Update()
{
coin = FindObjectOfType<Coin>();
GetComponent<Text>().text = coin.GetScore().ToString();
}
用于添加硬币得分的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Coin : MonoBehaviour
{
float speed = 10f;
public static int score = 0;
void Update()
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
private void OnTriggerEnter2D(Collider2D collision)
{
score += 1;
}
public int GetScore()
{
return score;
}
}
我还需要说,我在用那个分数来搞乱 PlayerPrefs 来制作一些高分概念,但是我删除了我所做的每个 PlayerPrefs。 非常感谢。
这是有问题的行:
public static int score = 0;
声明为“静态”的变量将持续与运行时一样长,即使它所绑定的 object 被破坏(它是所有硬币对象共享的值)。
理想情况下,您会使其成为非静态的(这是 Unity 所期望的)。
public int score = 0;
如果您随后在玩家死亡时重新创建硬币 object,Unity 将为您处理清理工作。
或者,您可以向硬币 class 添加“重置”方法...
public int GetScore()
{
return score;
}
public void Reset()
{
score = 0;
}
我回答了一个更详细地涉及静态的问题,并且可能会引起人们的兴趣。
通常,当 class 有变量时,每次创建 class 的新实例时,它都会获得每个变量的自己的副本。
(您可以创建两个
Animal
类并为每个类赋予不同的Name
)
static
变量不同。 它们不是每个实例都有自己的变量副本,而是共享同一个。所以如果你设置
animal1.StaticName
,你也会改变animal2.StaticName
。 更重要的是,你甚至不需要制作动物,你可以直接设置Animal.StaticName
。所以...即使您尚未创建 class 的实例,也可以读取/设置 static 变量(并且可以执行 static 方法)。
哦,而且...如果您决定保留分数 static,则无需查找特定的 object 即可获得分数...
void Update()
{
GetComponent<Text>().text = Coin.score.ToString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.