首页 > 其他分享 >Timeline - PlayableBehavior轨道

Timeline - PlayableBehavior轨道

时间:2022-12-27 01:11:06浏览次数:39  
标签:Timeline float PlayableBehavior endValue 轨道 alpha playable public canvasGroup

使用Timeline实现CanvasGroup的补间动画

1) 创建轨道资源类

using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class CanvasGroupClip : PlayableAsset
{
    [SerializeField]
    private ExposedReference<CanvasGroup> _target;
    [SerializeField]
    private float _startValue;
    [SerializeField]
    private float _endValue;

    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        var playable = ScriptPlayable<CanvasGroupBehaviour>.Create(graph);
        var canvasGroup = _target.Resolve(graph.GetResolver());
        playable.GetBehaviour().Init(canvasGroup, _startValue, _endValue);

        return playable;
    }

}

2) 创建资源行为类

using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class CanvasGroupBehaviour : PlayableBehaviour
{
    public CanvasGroup _canvasGroup;
    public float _startValue;
    public float _endValue;

    public void Init(CanvasGroup canvasGroup, float startValue, float endValue)
    {
        _canvasGroup = canvasGroup;
        _startValue = startValue;
        _endValue = endValue;
    }

    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        if (null == _canvasGroup)
            return;
            
        float progress = (float)(playable.GetTime() / playable.GetDuration());
        float alpha = Mathf.Lerp(_startValue, _endValue, progress);
        _canvasGroup.alpha = alpha;
        Debug.Log($"CanvasGroupBehaviour: alpha: {alpha}");
    }

}

创建一个Playable轨道

 

更加优雅的写法

上面的代码_startValue, _endValue需要在两个类中都写一遍,还得给他们赋值,下面的代码写法只需要在Behaviour中写一遍

using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class CanvasGroupClip : PlayableAsset
{
    public CanvasGroupBehaviour template = new CanvasGroupBehaviour();

    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        var playable = ScriptPlayable<CanvasGroupBehaviour>.Create(graph, template);
        return playable;
    }

}

#

using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class CanvasGroupBehaviour : PlayableBehaviour
{
    [SerializeField]
    private ExposedReference<CanvasGroup> _target;
    [SerializeField]
    public float _startValue;
    [SerializeField]
    public float _endValue;

    private CanvasGroup _canvasGroup;

    public override void OnGraphStart(Playable playable)
    {
        _canvasGroup = _target.Resolve(playable.GetGraph().GetResolver());
    }

    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        if (null == _canvasGroup)
            return;

        float progress = (float)(playable.GetTime() / playable.GetDuration());
        float alpha = Mathf.Lerp(_startValue, _endValue, progress);
        _canvasGroup.alpha = alpha;
        Debug.Log($"CanvasGroupBehaviour: alpha: {alpha}");
    }

}

#

 

标签:Timeline,float,PlayableBehavior,endValue,轨道,alpha,playable,public,canvasGroup
From: https://www.cnblogs.com/sailJs/p/17007218.html

相关文章

  • 轨道交通的数字化转型
    公共交通在过去十年中经历了许多变革,城市交通则发生了巨变。数字化创新为我们的生活和出行方式带来了许多令人兴奋的改变。数字化发展迅速,信息技术的每一项进展、每一次进......
  • html5 css timeline horizontal
     <!doctypehtml><html><head><metacharset="utf-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1......
  • Unity开发笔记-Timeline扩展笔记(1)
    ILayerable代码修改动画后推publicstaticvoidSetTimeClipExtrapolation(TimelineClipclip,TimelineClip.ClipExtrapolationextrapolation){vartype=clip.Get......
  • 利用循环轨道求 Jordan 标准型的过渡矩阵
    设$A$为$n$阶复矩阵,则由Jordan标准型理论可知,存在非异阵$P$,使得$$P^{-1}AP=J=\mathrm{diag}\{J_{r_1}(\lambda_1),J_{r_2}(\lambda_2),\cdots,J_{r_k}(\lamb......
  • 解决Unity打包后Timeline里部分特效没显示的bug
    问题描述比较诡异的问题,美术同学给过来的特效资源,在Edtior里是正常播放的,但打包后特效里应该落下来的光柱却消失了。问题分析考虑到打包后的环境和Editor环境的区别As......
  • SARscape存放sentinel-1精密轨道数据并自动读取
    问题描述在SARScape导入sentinel-1数据并处理的时候,需要精密轨道文件(可选,非必须),SARscape562可以自动下载精密轨道数据,但经常出错,为了处理数据流程顺利,建议手动下载好需要的......
  • 轨道交通数字化进程如何从 WHY 到 HOW
    「今天与未来之间的摆渡人,场景与技术之间的连接器」 “人悦其行,物优其流”是人们对于未来交通最理想状态的描述。人或者物,要在民航、地铁、海运、公路等各种有形的路网......
  • 复制流报错:Latest checkpoint is at 2/7C3079A0 on timeline 1, but in the history o
    我的测试环境从PostgreSQL9.6.0异步复制流通过pg_upgrade方式升级到14.5,通过rsync将primary数据传输到standby端[postgres]]#rsync-avzpostgres@standby:/data/postgr......