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 ExportText(string path, TimelineAsset timeline) { if (!timeline) { return(false); } var clips = Misc.GetRemoteTalkClips(timeline).OrderBy(a => a.start).ToList(); var talks = clips.Select(a => ((RemoteTalkClip)a.asset).talk.Clone()).ToList(); for (int i = 1; i < talks.Count; ++i) { var currentClip = clips[i - 1]; var nextClip = clips[i]; talks[i - 1].wait = Mathf.Max(0.0f, (float)(nextClip.start - currentClip.end)); } return(RemoteTalkScript.TalksToTextFile(path, talks)); }