Cinemachine&Timeline实践

使用前:

  • Cinemachine 为Unity 2017新功能,2018使用时在新建项目时选择导入对应的包,直接在商店里导入资源包可能会报编译错误
  • Timeline 直接集成在编辑器中,可以在Project中直接创建Timeline,放入场景中

相关参考博客: 
https://blog.csdn.net/beihuanlihe130/article/details/79233320

Timeline

Timeline可以创建不同的Track,实现对应类型资源的管理,包括:

  • Track Group
    同一游戏对象的Timeline的各个Track可以集中在同一个Group内管理
  • Activation Track 
    控制游戏对象的显示与隐藏
  • Animation Track 
    动画轨道,可以添加指定的AnimationClip,或者游戏对象的Transform属性的关键帧生成动画,同时可以添加Override Track将不同类型的动画(如 AniamtionClip和Transform属性关键帧等)进行融合
  • Audio Track 
    声音轨道
  • Control Track 
    主要控制与时间有关的元素,如粒子效果、Timeline等
  • Playable Track 
    添加自定义播放控制脚本
  • Cinemachine_Timeline 
    添加Cinemachine片段

同一Track的不同片段之间可以融合,进行插值过渡

Timeline资源可以自定义触发播放

    playableDirector.Play();
    //TimelineAsset 为 PlayableDirector类型   

Cinemachine

  • Dolly Camera with track 
    创建一个虚拟相机和轨道,轨道中可以添加点位,通过设置虚拟相机的Body属性中PathPosition的值(0-index)控制相机随轨道移动
     
    一般配合Timeline使用,实现相机的推拉,添加Animation Track指定对应的虚拟相机(with track),改变PathPosition的值,同时将虚拟相机添加到Cinemachine Track中,配合完成相机沿轨道运动。

  • Playable Track 
    Playable Track可以自定义相关动画效果,在Default Playables资源包中包含了一部分自定义的功能轨道,包括文字、时间、灯光、位置、寻路、淡入淡出等效果,用户也可以根据自己的需要进行定制化开发,以实现更加复杂的效果。 
    自定义脚本继承自 PlayableBehaviour 类,用户通过重写对应方法实现自定义效果:

    public class PlayableBehaviour : ScriptableObject, IPlayableAsset, IPlayableBehaviour
    {
    public BasicPlayableBehaviour();
    
    public virtual double duration { get; }
    public virtual IEnumerable<PlayableBinding> outputs { get; }
    
    public virtual Playable CreatePlayable(PlayableGraph graph, GameObject owner);
    public virtual void OnBehaviourPause(Playable playable, FrameData info);
    public virtual void OnBehaviourPlay(Playable playable, FrameData info);
    public virtual void OnGraphStart(Playable playable);
    public virtual void OnGraphStop(Playable playable);
    public virtual void OnPlayableCreate(Playable playable);
    public virtual void OnPlayableDestroy(Playable playable);
    public virtual void PrepareFrame(Playable playable, FrameData info);
    public virtual void ProcessFrame(Playable playable, FrameData info, object playerData);
    }
    

例如控制播放的速度:

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

public class PlayableTime : BasicPlayableBehaviour {
//动画曲线,通过曲线控制取值
public AnimationCurve mCurve;
//已播放时间
private float havePlayedTime;
//曲线总间隔时间
private float allTime;

//当playable停止播放时,将Game的时间播放速度重置为1
public override void OnGraphStop(Playable playable)
{
    Time.timeScale = 1;
}

//当playable播放时,获得该片段的完整时长
public override void OnBehaviourPlay(Playable playable, FrameData info)
{
    allTime = (float)PlayableExtensions.GetDuration(playable);
}

//在playable播放时的每一帧,获取累计已播放时间,除以总间隔,
//对应到曲线的x轴,从曲线上取得对应播放速度值
public override void PrepareFrame(Playable playable, FrameData info)
{
    havePlayedTime += info.deltaTime;
    Time.timeScale = mCurve.Evaluate(havePlayedTime/allTime);
}
}  

有个小问题,在Unity2018.2.3f1中使用Playable Track创建自定义效果时,如果继承自 PlayableBehaviour ,Playable Track将不能识别该脚本,只好使用过时的 BasicPlayableBehaviour 不影响使用。

最终实现效果:

相关参考:

https://zhuanlan.zhihu.com/p/29387185

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值