You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity脚本中获取VFX的生命周期?

获取Unity VFX生命周期的实现方法

要在脚本中控制或获取Unity VFX的生命周期,核心依赖VisualEffect类(位于UnityEngine.VFX命名空间),以下是具体的实现方式:

一、获取基础生命周期参数

  • 获取VFX主序列总时长:使用mainDuration属性,返回主序列的单次播放时长(单位:秒):
    float totalDuration = vfx.mainDuration;
    
  • 判断VFX是否正在播放:通过isPlaying属性直接获取状态:
    bool isVFXPlaying = vfx.isPlaying;
    
  • 获取当前已播放时长:使用time属性获取当前播放进度对应的时间:
    float playedTime = vfx.time;
    
  • 获取特定子序列时长:如果VFX包含多个子序列,可通过序列名获取对应时长:
    float subSequenceDuration = vfx.GetSequenceDuration("SubSequenceName");
    

二、监听VFX生命周期结束事件(最可靠方式)

通过VFX Graph的Send Event节点配合脚本回调,能精准监听VFX的结束时机(包括循环结束、分支结束等自定义节点):

  1. 在VFX Graph中配置事件:在VFX的结束节点(如Block End)后添加Send Event节点,设置事件名称(例如OnVFXFinished)。
  2. 在脚本中注册回调:
using UnityEngine;
using UnityEngine.VFX;

public class VFXLifecycleController : MonoBehaviour
{
    [SerializeField] private VisualEffect targetVFX;

    private void Start()
    {
        if (targetVFX != null)
        {
            // 注册事件回调
            targetVFX.RegisterEventCallback<VFXEventAttribute>("OnVFXFinished", HandleVFXFinish);
        }
    }

    private void HandleVFXFinish(VFXEventAttribute attribute)
    {
        // 这里编写VFX结束后的逻辑
        Debug.Log("VFX已完成播放");
    }

    private void OnDestroy()
    {
        if (targetVFX != null)
        {
            // 注销回调,避免内存泄漏
            targetVFX.UnregisterEventCallback<VFXEventAttribute>("OnVFXFinished", HandleVFXFinish);
        }
    }
}

三、协程等待VFX完成(适用于非循环VFX)

如果VFX没有循环且时长固定,可通过协程等待时长来判断结束:

private IEnumerator WaitForVFXCompletion()
{
    if (targetVFX == null || !targetVFX.isPlaying) yield break;

    yield return new WaitForSeconds(targetVFX.mainDuration);
    Debug.Log("VFX播放完成(协程方式)");
}

注意:这种方式不适用于循环VFX、动态时长VFX,或中途被手动停止的情况,可靠性不如事件回调。

四、手动控制生命周期

  • 启动VFX:targetVFX.Play();
  • 停止VFX:targetVFX.Stop();(可传入参数控制是否立即终止或完成当前循环)
  • 重置VFX:targetVFX.Reinit(); 将VFX重置到初始状态

内容的提问来源于stack exchange,提问作者moonkanghyuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:39:20