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内获取绑定对象#
public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
{
var director = go.GetComponent<PlayableDirector>();
var animator = director.GetGenericBinding(this) as Animator;
}
在Clip上显示正确的AnimationClip长度#
public override double duration
{
get
{
double length = TimeUtility.GetAnimationClipLength(animationClip);
if (length < float.Epsilon)
return base.duration;
return length;
}
}
自定义背景#
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属性#
public static void SetTimeClipExtrapolation(TimelineClip clip,TimelineClip.ClipExtrapolation extrapolation)
{
var type = clip.GetType();
var property = type.GetProperty("postExtrapolationMode");
property.SetValue(clip,extrapolation);
}
Clip上显示的文字改变#
继承ClipEditor
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>
#
string guid = GUID.Generate().ToString();
ExposedReference<CinemachineVirtualCameraBase> cam;
cam.exposedName = guid;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!