Beispiel #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);
        }
Beispiel #2
0
        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));
        }