方法一、Update每帧检测时间
写法复杂,可读性差。方法1适合需要同步显示时间的场合
private float timer= 3f;
bool flag =true;
void Update()
{
if(!flag) return;
if(timer<0)
{
flag =false;
//执行逻辑
}
else
{
timer-=Time.deltaTime;
}
}
public float coldTime;
public void DelayDestroy3()
{
if (coldTime > 0)
{
coldTime -= Time.deltaTime; //如果coldTime大于零 就减去deltaTime
//deltaTime返回一个数值 1/帧率 如当前是50帧 则返回1/50
//如果使用FixedUpdate可以用Time.fixedDeltaTime
}
else //(coldTime<0》)若时间不大于0 即计时结束 则执行代码块
{
//Scripts here
}
}
方法二、Invoke
方法2适合简单的延迟场合
1.延迟执行函数
pubic float delayTime;
void Start()
{
Invoke("Explode", delayTime);
}
void Explode()
{
anim.SetTrigger("explode");
}
2.重复延迟执行函数
InvokeRepeating("Explode",delayTime,intervalTime)
-
参数一:函数名
-
// 参数二:第一次执行的延迟时间
-
// 参数三:之后每次执行的间隔时间
3.取消延迟函数
CancelInvoke("Explode");
只要取消了指定延迟 不管之前该函数开启了多少次 延迟执行 都会统一取消
4.判断是否有延迟函数
if (IsInvoking("Explode"))
{
print("存在延迟函数");
}
方法三、协程
使用协程,配合WaitForSeconds,可控性更高,可以直接传参。方法3适合较为复杂的延迟场合
void()
{
StartCoroutine(DelayMethod(3));
}
IEnumerator DelayMethod(float delayTime)
{
//受到TimeScale影响
yield return new WaitForSeconds(delayTime);
//不受到TimeScale影响
yield return new WaitForSecondsRealTime(delayTime);
}
方法四、DoTween动画插件
方法4适合UI动画场合(配合其他功能一起使用)
void Start ()
{
var seq= DOTween. Sequence ();
seq.AppendInterval (3f);
seq.AppendCallback(()=>{ DelayFunc(8); });
seq.SetAutoKill (false);
// seq. SetUpdate (true);//不受Time.timeScale影响
}
void DelayFunc(float diff)
{
//执行逻辑
}
方法五、UnityTimer(github上开源项目)
方法5可以自行尝试,不觉得能平替所有方法文章来源:https://www.toymoban.com/news/detail-518365.html
void Start()
{
Timer.Register (3f, () => //执行逻辑);
}
akbiggs/UnityTimer:功能强大且方便的库,用于在 Unity3D 中延迟后运行操作。 (github.com)文章来源地址https://www.toymoban.com/news/detail-518365.html
总结
- 方法1适合需要同步显示时间的场合
- 方法2适合简单的延迟场合
- 方法3适合较为复杂的延迟场合
- 方法4适合UI动画场合(配合其他功能一起使用)
- 方法5可以自行尝试,不觉得能平替所有方法
到了这里,关于Unity 延迟执行的5种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!