问题在于,如果使用自动或使用鼠标,它将创建越来越多的对象。
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,它将启动许多协程。
您可以添加Thread.Sleep(miliseconds);
以等待它发生。您还可以创建一个休眠一段时间的任务,然后进行删除,请确保将其await
。
除了无限循环之类的常规编码问题外,启动一堆协程没有其他缺点。
协程也正是您需要的,而这种方法仅在协程中起作用,该方法称为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
}