在我的游戏中,玩家必须收集一枚硬币。问题是,当玩家死亡并开始一个新的游戏时,硬币的数量不会被重置。例如:
开始新游戏并收集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。非常感谢。
发布于 2021-01-08 19:48:08
这是一行有问题的代码:
public static int score = 0;
声明为"static“的变量将和运行时一样持续很长时间,即使它所绑定的对象被销毁(它是在所有coin对象之间共享的值)。
理想情况下,您应该将其设置为非静态的(这正是Unity所期望的)。
public int score = 0;
如果您在玩家死亡时重新创建Coin对象,unity将为您处理清理工作。
或者,您可以将"Reset“方法添加到Coin类中...
public int GetScore()
{
return score;
}
public void Reset()
{
score = 0;
}
I answered a question,它更详细地介绍了静力学,可能会引起人们的兴趣。
通常当一个类有变量时,每次你创建一个新的类实例,它都会得到每个变量的副本。
(您可以创建两个Animal
类,并为每个类提供不同的Name
)
static
变量是不同的。它们都共享同一个变量,而不是每个实例都有自己的变量副本。
所以如果你设置了animal1.StaticName
,你也需要修改animal2.StaticName
。更重要的是,您甚至不需要创建动物,只需直接设置Animal.StaticName
即可。
所以..。静态变量可以读取/设置(并且可以执行静态方法),即使您还没有创建类的实例。
还有..。如果你决定保持分数不变,你不需要找到一个特定的对象来获得分数……
void Update()
{
GetComponent<Text>().text = Coin.score.ToString();
}
https://stackoverflow.com/questions/65628338
复制相似问题