Unity开发笔记-Timeline扩展笔记(1)

#

ILayerable

代码修改动画后推
public static void SetTimeClipExtrapolation(TimelineClip clip,TimelineClip.ClipExtrapolation extrapolation)
{
var type = clip.GetType();
var property = type.GetProperty("postExtrapolationMode");
property.SetValue(clip,extrapolation);
}

TrackAsset内获取绑定对象#

Copy
public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount) {     var director = go.GetComponent<PlayableDirector>();     var animator = director.GetGenericBinding(this) as Animator; }

在Clip上显示正确的AnimationClip长度#

Copy
public override double duration {    get    {        double length = TimeUtility.GetAnimationClipLength(animationClip);        if (length < float.Epsilon)            return base.duration;        return length;    } }

自定义背景#

Copy
public class AnimationExtClipEditor:ClipEditor { public override void DrawBackground(TimelineClip clip, ClipBackgroundRegion region) { base.DrawBackground(clip, region); var ac = clip.asset as AnimationExtClip; var blendTime = ac.template.BlendTime; if (blendTime <= 0) { return; } if (clip.hasBlendIn) { return; } var duration = clip.duration; float left = region.position.xMin; float max = region.position.xMax; float right = blendTime / (float)duration * max; right = Mathf.Min(right, max); var rect = Rect.MinMaxRect(left, region.position.yMin, right, region.position.yMax); EditorGUI.DrawRect(rect, Color.green); } }

外推对Behaviour逻辑的影响#

超过Clip范围,外推时State还是Playing
会改变Duration

seekOccur问题#

mixer为true,clip对应的behaviour为false

设置TimelineClip的Extrapolation属性#

Copy
public static void SetTimeClipExtrapolation(TimelineClip clip,TimelineClip.ClipExtrapolation extrapolation) { var type = clip.GetType(); var property = type.GetProperty("postExtrapolationMode"); property.SetValue(clip,extrapolation); }

Clip上显示的文字改变#

继承ClipEditor

Copy
public override void OnClipChanged(TimelineClip clip) { base.OnClipChanged(clip); var extClip = clip.asset as AnimationExtClip; if (extClip == null) { return; } if (extClip.animationClip != null) { clip.displayName = extClip.animationClip.name; } }

代码中设置ExposedReference<T>#

Copy
string guid = GUID.Generate().ToString(); ExposedReference<CinemachineVirtualCameraBase> cam; cam.exposedName = guid;
posted @   jeoyao  阅读(517)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
目录