示例#1
0
        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);
        }
示例#2
0
        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));
        }