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.
		
		
		
		
		
			
		
			
	
	
		
			77 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using System.Collections.Generic; | ||
|  | using UnityEngine.Timeline; | ||
|  | 
 | ||
|  | namespace Game | ||
|  | { | ||
|  |     public class TimelineObject | ||
|  |     { | ||
|  |         public List<TimelineClipPoolItem> MClips = new List<TimelineClipPoolItem>(); | ||
|  |     } | ||
|  |     public class TimelineManager : ManagerBase<TimelineManager> | ||
|  |     { | ||
|  |         private static readonly string MSkillTimelinePathRoot = "Timeline/"; | ||
|  |         public TimelineManager() | ||
|  |         { | ||
|  |         } | ||
|  |         public override void OnCreate() | ||
|  |         { | ||
|  |         } | ||
|  |         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)); | ||
|  |                 entityTimeline.MClips.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.MClips) | ||
|  |                 { | ||
|  |                     var clipReal = clip.Clip; | ||
|  |                     if (clipReal.IsAlive) | ||
|  |                     { | ||
|  |                         clipReal.OnLeave(); | ||
|  |                     } | ||
|  |                     clip.Destroy(); | ||
|  |                 } | ||
|  |                 timeline.Timeline.MClips.Clear(); | ||
|  |             } | ||
|  |             timeline.IsRunning = false; | ||
|  |             timeline.IsPause = false; | ||
|  | 
 | ||
|  |         } | ||
|  |         public TimelineAsset EnsureGetSkillTimeline(string path) | ||
|  |         { | ||
|  |             var pathReal = $"{MSkillTimelinePathRoot}{path}"; | ||
|  |             return Util.Load<TimelineAsset>(pathReal); | ||
|  |         } | ||
|  |     } | ||
|  | } |