在Unity C#中重置自己后,我如何让计时器继续



我正在尝试让一个计时器在游戏重置后继续,并且现在仍然有相同的时间,每次我的角色重置时都会重置计时器。我在一个3D Unity游戏中用C#做这件事。我看了很多视频和网站,似乎没有人知道答案。这是我的代码:


void Dying()
{
Invoke("LoadFirstLevel", Delay);
}
void OnCollisionEnter(Collision collision)
{
switch (collision.gameObject.tag)
{
case "Obstacle":
LoadFirstLevel();
break;
}
}

private void LoadFirstLevel()
{
SceneManager.LoadScene(0);
} 

这是我的计时器代码:

{
float currentTime = 0f;
float startingTime = 60f;
AudioSource audioSource;
[SerializeField] Text CountdownText;
void Start()`enter code here`
{
currentTime = startingTime;
}
void Update()
{
currentTime -= 1 * Time.deltaTime;
CountdownText.text = currentTime.ToString("0");
if (currentTime <= 0)
{
currentTime = 0;
}
}
}

DontDestroyOnLoad添加到计时器对象中。它可以防止在场景更改时破坏对象。

void Awake() {
DontDestroyOnLoad(this.gameObject);
}

或者您可以使用静态变量来计算时间。它也保持了价值。

您可以使用static字段,这样它就可以在该类的所有实例之间"共享"-会话范围!

您可以将其与第二个static bool标志组合起来,用于指示字段之前是否初始化过,因此以后不会重置为60,而只是第一次:

private static float currentTime = 0f;
// This could even be a constant
private const float startingTime = 60f;
private static bool isInitialized;
AudioSource audioSource;
[SerializeField] Text CountdownText;
void Start()
{
// Use the flag so this is only done once for this session
if(!isInitialized)
{
currentTime = startingTime;
isInitialized = true;
}
}
void Update()
{
currentTime -= * Time.deltaTime;
CountdownText.text = currentTime.ToString("0");
if (currentTime <= 0)
{
currentTime = 0;
}
}

现在,计时器的每个实例都会减少相同的currentTime字段。

最新更新