如何在X秒后销毁对象?

问题描述 投票:0回答:2

问题在于,如果使用自动或使用鼠标,它将创建越来越多的对象。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScifiEffects : MonoBehaviour
{
    public GameObject spawnEffect;
    public bool automaticFire = false;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (automaticFire == false)
        {
            if (Input.GetMouseButtonDown(0))
            {
                GameObject effect = Instantiate(spawnEffect, transform.position, Quaternion.FromToRotation(Vector3.up, spawnEffect.transform.forward)) as GameObject;
            }
        }
        else
        {
            GameObject effect = Instantiate(spawnEffect, transform.position, Quaternion.FromToRotation(Vector3.up, spawnEffect.transform.forward)) as GameObject;
        }
    }
}

如果添加:

Destroy(effect);

无论是使用鼠标还是自动,都将立即销毁游戏对象,并且效果不会发生。我可以使用协程,但是无论是否自动,我都必须在Update中调用StartCoroutine,它将启动许多协程。

c# unity3d
2个回答
0
投票

您可以添加Thread.Sleep(miliseconds);以等待它发生。您还可以创建一个休眠一段时间的任务,然后进行删除,请确保将其await


0
投票

除了无限循环之类的常规编码问题外,启动一堆协程没有其他缺点。

协程也正是您需要的,而这种方法仅在协程中起作用,该方法称为WaitForSeconds()据我所知

void Update()
{
    if(true) // Change if statement so you don't create an infinite loop and crash your program
    {
        StartCoroutine("SpecialEffects");
    }
}

IEnumerator SpecialEffects()
{
    // Special Effects
    yield return new WaitForSeconds(seconds);
    // Code that destroys something
}
© www.soinside.com 2019 - 2024. All rights reserved.