C# 如何制作带滑块的倒计时计时器
在我的游戏中,我有一个滑块,它代表剩余的时间量,剩余的时间每秒下降1。这是我想到的,但滑块不会下降,除非第一次有人能帮我修复代码C# 如何制作带滑块的倒计时计时器,c#,user-interface,unity3d,timer,C#,User Interface,Unity3d,Timer,在我的游戏中,我有一个滑块,它代表剩余的时间量,剩余的时间每秒下降1。这是我想到的,但滑块不会下降,除非第一次有人能帮我修复代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class Timer : MonoBehaviour { public
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Timer : MonoBehaviour
{
public float time = 100;
public float totalTime = 100;
public float duration = 1;
public Slider slider;
// Use this for initialization
void Start()
{
time = totalTime;
slider.value = time;
StartCoroutine(CountDown());
}
// Update is called once per frame
IEnumerator CountDown()
{
if (time > 0)
{
yield return new WaitForSeconds(duration);
time -= 1;
slider.value = time;
yield return CountDown();
}
}
}
已解决:
public class Timer : MonoBehaviour
{
public float timeLeft;
public float maxTime = 100f;
public float duration = 1;
public Slider slider;
// Use this for initialization
private void Start()
{
timeLeft = maxTime;
slider.value = timeLeft;
}
// Update is called once per frame
void Update()
{
if (timeLeft > 0)
{
timeLeft -= Time.deltaTime;
slider.value = timeLeft / maxTime;
}
else
{
Time.timeScale = 0;
}
}
}
您不完全了解协同路由和收益返回是如何工作的 简单地说,协程总是在收益返回时离开,允许下一帧开始,但让我们说,记住它离开的地方。在下一帧中,它将在它离开的地方继续 因此,如果您想使用协同程序,而不是像前面建议的那样在
update
中简单地执行协同程序,您可以使用以下两个选项:
start例程()
调用协同程序。所以你的台词
yield return倒计时();
你必须使用
start例程(倒计时());
IEnumerator倒计时()
{
而(时间>0)
{
产生返回新的WaitForSeconds(持续时间);
时间-=持续时间;
slider.value=时间;
//这将在此时离开协同程序
//因此,在下一帧中,while循环继续
收益返回空;
}
}
我们需要一个更精确的问题描述,然后“不起作用”。@Christopher好的,我更改了description@Christopher你要帮我写代码吗please@ModusTollens-我已经部分修复了。OP现在应该编辑出答案并单独发布。@JonBergeron您能从问题中复制并剪切答案并粘贴到答案部分吗?如果你愿意,你甚至可以接受自己的答案。