将脚本托到物体或预制体上即可使用,物体存在时间、闪烁时间、速度,摧毁物体对象等可在inspector自定义。
可根据需要自行修改代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlashDestroy : MonoBehaviour
{
public float duration;//物体存在时间
public float flashDuration;//闪烁时间
public float flashSpeed;//闪烁速度
private float timer = 0f;//计时器
private bool isFlashing = false;
private SpriteRenderer sr;
public GameObject destroyObject;//摧毁物体对象
// Start is called before the first frame update
void Start()
{
sr = GetComponent<SpriteRenderer>();
StartCoroutine(ObjectLifespan());
}
IEnumerator ObjectLifespan()
{
yield return new WaitForSeconds(duration - flashDuration);//等待直到闪烁
StartFlashing();
}
void StartFlashing()
{
isFlashing = true;
InvokeRepeating("Flash", 0f, flashSpeed);
//参数1为调用的函数,参数2为首次调用函数的时间,参数3为函数调用的时间间隔
}
void Flash()
{
if (isFlashing)
{
sr.enabled = !sr.enabled;
flashSpeed = Mathf.Max(0.001f, flashSpeed * 0.5f);
}
}
// Update is called once per frame
void Update()
{
}
private void FixedUpdate()
{
timer += Time.deltaTime;
if(timer >= duration)
{
StopAllCoroutines();
CancelInvoke();
Destroy(destroyObject);
}
}
}
/*
*InvokeRepeating是一个MonoBehaviour类的方法,
*它允许你调用一个特定的函数,
*并在指定的时间间隔后重复调用该函数,
*直到你使用CancelInvoke方法停止调用。
*/
效果如图:
物体闪烁消失test