【问题标题】:How to put a countdown trigger?如何设置倒计时触发器?
【发布时间】:2021-01-16 18:12:25
【问题描述】:

我刚进入 Game Dev,当我的玩家踩到立方体触发器时,我需要我的脚本来启用,但我不知道怎么做。

这是我输入的脚本,我不知道是否应该删除Void Start

public class CountdownTimer : MonoBehaviour {
    
    public bool timerIsRunning;

    public Text timeText;

    public float timeRemaining = 10;

    private void Start()
    {
        timerIsRunning = true;
    }

    void Update(){
        if (timerIsRunning)
        {
            if (timeRemaining > 0)
            {
                timeRemaining -= Time.deltaTime;
                DisplayTime(timeRemaining);
            }
            else
            {
                Debug.Log("Time has run out!");
                timeRemaining = 0;
                timerIsRunning = false;
            }
        }
    }

    void DisplayTime(float timeToDisplay){
        timeToDisplay += 1;

        float minutes = Mathf.FloorToInt(timeToDisplay / 60); 
        float seconds = Mathf.FloorToInt(timeToDisplay % 60);

        timeText.text = string.Format("{0:00}:{1:00}", minutes, seconds);
    }
}

【问题讨论】:

  • 听起来你想用一个简单的IEnumerator OnTriggerEnter(Collider other){ } 替换StartUpdate .. 我也会把它改成private bool 所以你不能意外地启用通过 Inspector

标签: c# unity3d


【解决方案1】:

我认为您可以充分利用触发对撞机。为此,您需要将您选择的对撞机添加到您的区域并将其设置为触发器。确保播放器上有碰撞器和刚体。

然后在您的脚本中,您可以使用 OnTriggerEnter 函数,当一个对象进入您的触发对撞机定义的区域时,该函数将被调用。

对于您的倒计时方法,您可以充分利用 couroutine。它看起来像这样:

IEnumerator DisplayTime() {
    timeIsRunning = true;
    for (int i = 0; i < timeRemaining; i++) {
        // your code to change the text
        yield return new WaitForSeconds(1);
    }
    timeIsRunning = false;
}

private void OnColliderEnter(Collider other) {
    if(!timeIsRunning) {
        StartCouroutine(DisplayTime());
    }
}

这段代码的作用是当一个对象进入触发器时,它会启动一个例程,该例程将每秒更新显示的时间,直到倒计时结束。

这样您就不再需要 Start 和 Update 方法了。

如果您想了解更多关于触发对撞机的信息:https://docs.unity3d.com/ScriptReference/Collider-isTrigger.html

如果您想了解更多关于 couroutines 的信息:https://docs.unity3d.com/Manual/Coroutines.html

如果您想了解有关 OnTriggerEnter 方法的更多信息:https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2020-06-19
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多