You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine.Timeline;
|
|
|
|
namespace Game
|
|
{
|
|
public class TimelineObject
|
|
{
|
|
public readonly List<TimelineClipPoolItem> Clips = new List<TimelineClipPoolItem>();
|
|
}
|
|
|
|
public class TimelineManager : ManagerBase<TimelineManager>
|
|
{
|
|
private const string SkillTimelinePathRoot = "Timeline/";
|
|
|
|
public void RunSkillTimeline(GameEntity entity, string skillName)
|
|
{
|
|
var entityTimeline = entity.timeline.Timeline;
|
|
var asset = EnsureGetSkillTimeline(skillName);
|
|
double timeMax = 0;
|
|
|
|
var clips = new List<TimelineClipPoolItem>();
|
|
foreach (var track in asset.GetOutputTracks())
|
|
{
|
|
clips.Clear();
|
|
foreach (var clip in track.GetClips())
|
|
{
|
|
var clipReal =
|
|
TimelineClipPoolManager.Instance.CreateByClipType(clip.asset.GetType(), clip, entity);
|
|
if (clipReal == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
clips.Add(clipReal);
|
|
if (clipReal.Clip.EndTime > timeMax)
|
|
{
|
|
timeMax = clipReal.Clip.EndTime;
|
|
}
|
|
}
|
|
|
|
//这里需要按时间排序 同类型clip时序问题
|
|
clips.Sort((a, b) => (int)((a.Clip.EndTime - b.Clip.EndTime) * 1000));
|
|
entityTimeline.Clips.AddRange(clips);
|
|
}
|
|
|
|
entity.timeline.TimePast = 0;
|
|
entity.timeline.TimeMax = timeMax;
|
|
entity.timeline.IsRunning = true;
|
|
}
|
|
|
|
public void EndSkillTimeline(GameEntity entity)
|
|
{
|
|
var timeline = entity.timeline;
|
|
if (timeline.Timeline != null)
|
|
{
|
|
foreach (var clip in timeline.Timeline.Clips)
|
|
{
|
|
var clipReal = clip.Clip;
|
|
if (clipReal.IsAlive)
|
|
{
|
|
clipReal.OnLeave();
|
|
}
|
|
|
|
clip.Destroy();
|
|
}
|
|
|
|
timeline.Timeline.Clips.Clear();
|
|
}
|
|
|
|
timeline.IsRunning = false;
|
|
timeline.IsPause = false;
|
|
}
|
|
|
|
public TimelineAsset EnsureGetSkillTimeline(string path)
|
|
{
|
|
var pathReal = $"{SkillTimelinePathRoot}{path}";
|
|
return Util.Load<TimelineAsset>(pathReal);
|
|
}
|
|
}
|
|
} |