栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

Unity TimeLine 自定义Track

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity TimeLine 自定义Track

如果有对TimeLine不熟悉的同学,可以先看一下这个视频
https://www.bilibili.com/video/BV13T4y1A7Se?from=search&seid=10488791428047585833&spm_id_from=333.337.0.0

在本方法中实现自定义track需要实现以下3个文件,以粒子特效为例子做演示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;


//绑定的Clip的类型(可以是定义的,也可以是AudioClip等)
[TrackClipType(typeof(MyParticleAsset))]
// 绑定的Track对象的类型
[TrackBindingType(typeof(ParticleSystem))]
public class ParticleTrack : TrackAsset
{
    public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
    {
        

        foreach (var clip in GetClips())
        {
            var myAsset = clip.asset as MyParticleAsset;
            if (myAsset)
            {               
             //获得clip的持续时间 把它设置为粒子的时间
                myAsset._psInitDuration = (float)clip.duration;
            }
        }

        return base.CreateTrackMixer(graph, go, inputCount);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Timeline;
using UnityEngine.Playables;
using System;

public class MyParticleAsset : PlayableAsset
{
    public int _emitInitCount;
    [NonSerialized]
    public float _psInitDuration;
    public Color _psInitColor;
    
   //创建一个clip的时候调用的方法
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        // 把逻辑和资源联系起来
        var playable = ScriptPlayable.Create(graph);

        var particleControlBehavliur = playable.GetBehaviour();
  
        particleControlBehavliur._emitCount = _emitInitCount;    
        particleControlBehavliur._psDuration = _psInitDuration;
        particleControlBehavliur._psStartColor = _psInitColor;


        return playable;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

public class MyParticleBehaviour : PlayableBehaviour
{
    public int _emitCount;   
    public int _emitFactor;
    public float _psDuration;
    public Color _psStartColor;
    private bool isInited = false;

    private ParticleSystem particle;

  

    //离开clip的时候调用的方法
    public override void OnBehaviourPause(Playable playable, FrameData info)
    {

        if (particle != null)
        {
            particle.Stop();            
        }
    }



    /// 
    /// timeLine 每次更新都会执行此方法
    /// 
    /// 
    /// 
    /// 就是Track中绑定的物体本身
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        //Debug.Log(playable.GetPlayState());

        _emitFactor = Time.frameCount;
         
        particle = playerData as ParticleSystem;

        if (isInited == false)
        {
            particle.Stop();
            var main = particle.main;
            var emission = particle.emission;
                //粒子的duration不能在播放的时候设置
            main.duration = _psDuration;
            main.startColor = _psStartColor;
            emission.rateOverTime = _emitCount;
            isInited = true;
        }
        else
        {
            particle.Play();
        }
        
    }
}

效果如下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/896899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号