public static bool ImportText(string path, TextImportOptions opt, TimelineAsset timeline, PlayableDirector director) { if (timeline == null || director == null) { return(false); } var talks = RemoteTalkScript.TextFileToTalks(path); if (talks == null) { return(false); } double time = opt.startTime; var oldArrange = arrangeClips; arrangeClips = ArrangeScope.CurrentTrack; if (opt.parCastTrack) { var tracks = new Dictionary <string, RemoteTalkTrack>(); foreach (var talk in talks) { RemoteTalkTrack track = null; if (!tracks.TryGetValue(talk.castName, out track)) { track = timeline.CreateTrack <RemoteTalkTrack>(null, "RemoteTalk"); track.director = director; track.name = talk.castName; tracks[talk.castName] = track; var audio = Misc.FindOrCreateGameObject(talk.castName + "_AudioSource"); track.audioSource = Misc.GetOrAddComponent <AudioSource>(audio); } var clip = track.AddClip(talk); clip.start = time; time += clip.duration + talk.wait + opt.interval; } } else { var track = timeline.CreateTrack <RemoteTalkTrack>(null, "RemoteTalk"); track.director = director; track.name = "RemoteTalkTrack"; var audio = Misc.FindOrCreateGameObject("RemoteTalkAudioSource"); track.audioSource = Misc.GetOrAddComponent <AudioSource>(audio); foreach (var talk in talks) { var clip = track.AddClip(talk); clip.start = time; time += clip.duration + talk.wait + opt.interval; } } arrangeClips = oldArrange; Misc.RefreshTimelineWindow(); return(false); }
public static bool ImportText(string path, TextImportOptions opt) { var timeline = Misc.currentTimeline; var director = Misc.currentDirector; if (timeline != null && director != null) { Undo.RecordObject(timeline, "RemoteTalk"); } else { timeline = ScriptableObject.CreateInstance <TimelineAsset>(); AssetDatabase.CreateAsset(timeline, "Assets/RemoteTalkTimeline.asset"); var go = new GameObject(); go.name = "RemoteTalkTimeline"; director = go.AddComponent <PlayableDirector>(); director.playableAsset = timeline; Selection.activeGameObject = go; } return(ImportText(path, opt, timeline, director)); }