一定时间后对象未出现

时间:2018-08-14 19:45:21

标签: c# unity3d flower

因此,我将对象放置在场景中,然后从检查器(对象名称旁边的复选标记框)将其设置为“不可见”(如果要禁用,请禁用),等待8秒钟后该对象不可见。我正在使用Unity 2d和C#。

我让游戏开始暂停了三秒钟,然后在那开始了。第一个脚本就是那个。该物品应该在8秒钟后重新出现,因此在游戏恢复后将无法正常工作。

com.muddzdev:styleabletoast:2.1.2

1 个答案:

答案 0 :(得分:1)

我仍然没有真正得到名为Start的两个方法

您可以在另一个协同程序的末尾简单地调用StartCoroutine,以便将它们链接在一起(尽管总的来说,确实有更好的方法可以完成您想要的事情):

using System.Collections;
using UnityEngine;

public class CountDown : MonoBehaviour
{
    public GameObject CountDownObject;
    public GameObject flowerObject;

    private void Start()
    {
        StartCoroutine(Delay());
    }

    private IEnumerator Delay()
    {
        yield return new WaitForSeconds(3);
        HideCountdown();
        StartCoroutine(FlowerDelay());
    }

    private void HideCountdown()
    {
        CountDownObject.SetActive(false);
    }

    private IEnumerator FlowerDelay()
    {
        yield return new WaitForSeconds(8);
        ShowFlower();
    }

    private void ShowFlower()
    {
        flowerObject.SetActive(true);
    }
}

我个人不喜欢协程..有时候它们不太容易调试。我更喜欢使用简单的计时器执行类似的操作(尽管乍一看看上去确实更糟)。优点是我现在可以在检查器中直接观看计时器的倒计时:

using UnityEngine;

public class SimpleCountDown : MonoBehaviour
{
    [Header("The Objects")]
    public GameObject CountDownObject;
    public GameObject FlowerObject;

    [Header("Settings")]
    // Here you can adjust the delay times
    public float StartOffset = 3;
    public float FlowerOffset = 8;

    [Header("Debug")]
    public float startTimer;
    public float flowerTimer;

    public bool isStartDelay;
    public bool isFlowerDelay;

    private void Start()
    {
        startTimer = StartOffset;
        flowerTimer = FlowerOffset;
        isStartDelay = true;
    }

    private void Update()
    {
        if (!isStartDelay && !isFlowerDelay) return;

        if (isStartDelay)
        {
            startTimer -= Time.deltaTime;
            if (startTimer <= 0)
            {
                HideCountdown();
                isStartDelay = false;
                isFlowerDelay = true;
            }
        }

        if (isFlowerDelay)
        {
            flowerTimer -= Time.deltaTime;
            if (flowerTimer <= 0)
            {
                ShowFlower();
                isFlowerDelay = false;
                this.enabled = false;
            }
        }
    }

    private void HideCountdown()
    {
        CountDownObject.SetActive(false);
    }

    private void ShowFlower()
    {
        FlowerObject.SetActive(true);
    }
}