因此,我将对象放置在场景中,然后从检查器(对象名称旁边的复选标记框)将其设置为“不可见”(如果要禁用,请禁用),等待8秒钟后该对象不可见。我正在使用Unity 2d和C#。
我让游戏开始暂停了三秒钟,然后在那开始了。第一个脚本就是那个。该物品应该在8秒钟后重新出现,因此在游戏恢复后将无法正常工作。
com.muddzdev:styleabletoast:2.1.2
答案 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);
}
}