예제 #1
0
    void OnGUI()
    {
        source = EditorGUILayout.ObjectField(source, typeof(TextAsset), true);

        if (GUILayout.Button("Add to scene"))
        {
            //find director
            timeline = GameObject.Find("TIMELINE");
            PlayableDirector director      = timeline.GetComponent <PlayableDirector>();
            TimelineAsset    timelineAsset = (TimelineAsset)director.playableAsset;

            //load json into class
            string          jsonText          = File.ReadAllText(Application.dataPath + "/Resources/json/" + source.name + ".json");
            PlayerStatsList myPlayerStatsList = new PlayerStatsList();
            JsonUtility.FromJsonOverwrite(jsonText, myPlayerStatsList);
            //loop through objects in class
            foreach (PlayerStats p in myPlayerStatsList.characters)
            {
                //place asset in scene
                MyClass myObject = new MyClass();
                myObject.characterPath = p.model;
                tempobj      = (GameObject)Instantiate(Resources.Load(myObject.characterPath), new Vector3(0, 0, 0), Quaternion.identity);
                tempobj.name = p.name;

                //create animation track on TIMELINE
                AnimationTrack newTrack = timelineAsset.CreateTrack <AnimationTrack>(null, "Animation Track " + tempobj.name);
                director.SetGenericBinding(newTrack, tempobj);
                myObject.animPath = p.anim;
                animObject        = Resources.Load("AnimTest/" + myObject.animPath);
                AnimationClip animClip;
                animClip = Resources.Load <AnimationClip>("AnimTest/" + myObject.animPath);
                newTrack.CreateClip(animClip);
            }
        }
    }
예제 #2
0
        public static TimelineClip SetAnimationClipAndCreateTrackClip(AnimationTrack t, AnimationClip aC)
        {
#if UNITY_EDITOR
            Undo.RecordObject(t, "Set Clean TimelineClip");
#endif
            TimelineClip tC = t.CreateClip(aC);
            tC.duration = aC.length;
            return(tC);
        }
        internal static void ConvertToClipMode(this AnimationTrack track)
        {
            if (!track.CanConvertToClipMode())
            {
                return;
            }

            UndoExtensions.RegisterTrack(track, L10n.Tr("Convert To Clip"));

            if (!track.infiniteClip.empty)
            {
                var animClip = track.infiniteClip;
                TimelineUndo.PushUndo(animClip, L10n.Tr("Convert To Clip"));
                UndoExtensions.RegisterTrack(track, L10n.Tr("Convert To Clip"));
                var start = AnimationClipCurveCache.Instance.GetCurveInfo(animClip).keyTimes.FirstOrDefault();
                animClip.ShiftBySeconds(-start);

                track.infiniteClip = null;
                var clip = track.CreateClip(animClip);

                clip.start = start;
                clip.preExtrapolationMode  = track.infiniteClipPreExtrapolation;
                clip.postExtrapolationMode = track.infiniteClipPostExtrapolation;
                clip.recordable            = true;
                if (Mathf.Abs(animClip.length) < TimelineClip.kMinDuration)
                {
                    clip.duration = 1;
                }

                var animationAsset = clip.asset as AnimationPlayableAsset;
                if (animationAsset)
                {
                    animationAsset.position    = track.infiniteClipOffsetPosition;
                    animationAsset.eulerAngles = track.infiniteClipOffsetEulerAngles;

                    // going to / from infinite mode should reset this. infinite mode
                    animationAsset.removeStartOffset = track.infiniteClipRemoveOffset;
                    animationAsset.applyFootIK       = track.infiniteClipApplyFootIK;
                    animationAsset.loop = track.infiniteClipLoop;

                    track.infiniteClipOffsetPosition    = Vector3.zero;
                    track.infiniteClipOffsetEulerAngles = Vector3.zero;
                }

                track.CalculateExtrapolationTimes();
            }

            track.infiniteClip = null;

            EditorUtility.SetDirty(track);
        }
        void Replace(TimelineClip _oldclip, AnimationClip _clip, AnimationTrack _selectedTrack, TimelineAsset _timelineAsset)
        {
            var clipInField = _oldclip.GetType().GetField("m_ClipIn", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            var clipInValue = (double)clipInField.GetValue(_oldclip);

            _timelineAsset.DeleteClip(_oldclip);

            var newAnimClip = _selectedTrack.CreateClip(newClip);

            newAnimClip.start       = _oldclip.start;;
            newAnimClip.duration    = _oldclip.duration;
            newAnimClip.displayName = _clip.name;
            newAnimClip.timeScale   = _oldclip.timeScale;
            newAnimClip.clipIn      = clipInValue;
        }
예제 #5
0
    void ConstructTimeline()
    {
        m_director = m_directorList[m_retIdx];

        Undo.RecordObject(m_director.playableAsset, "Import Animation Clip");

        var timeline_asset = m_director.playableAsset as TimelineAsset;

        double         marker    = 0.0;
        AnimationTrack animTrack = null;

        if (m_trackIdx == 0 && animTrack == null)
        {
            animTrack = timeline_asset.CreateTrack <AnimationTrack>(null, selected.name);
        }
        else
        {
            animTrack = m_animTracks[m_trackIdx - 1] as AnimationTrack;
        }

        foreach (var i in m_TreeView.m_itemList)
        {
            var animClip = i.animclip;

            var newClip = animTrack.CreateClip(animClip);
            m_director.SetGenericBinding(animTrack, selected);
            newClip.displayName = animClip.name;
            newClip.start       = marker;
            marker = newClip.end;

            // set exptrapolation to none
            TimelineUtils.SetClipExtrapolationMode(newClip, "preExtrapolationMode", TimelineClip.ClipExtrapolation.None);
            TimelineUtils.SetClipExtrapolationMode(newClip, "postExtrapolationMode", TimelineClip.ClipExtrapolation.None);
        }


        // update timeline window
        TimelineUtils.ToggleLockWindow();
        TimelineUtils.SetTimeline(timeline_asset, m_director);
        Selection.activeObject = m_director.gameObject;
        TimelineUtils.ToggleLockWindow();

        // persist changes
        EditorSceneManager.SaveScene(selected.scene);
    }
예제 #6
0
    void OnGUI()
    {
        //set window title
        this.titleContent = new GUIContent("IoM - Build Scene");
        //object field
        GUILayout.BeginHorizontal("box");
        source = EditorGUILayout.ObjectField(source, typeof(TextAsset), true);

        if (GUILayout.Button("Scene Name", GUILayout.Width(100)))
        {
            //get name of scene
            Scene scene = SceneManager.GetActiveScene();
            //look for corresponding json file
            var jsonFile = Resources.Load <UnityEngine.Object>("JSON/" + scene.name);
            //set object feild text asset to use json file
            source = EditorGUILayout.ObjectField(jsonFile, typeof(TextAsset), true);
        }

        GUILayout.EndHorizontal();
        if (GUILayout.Button("Add to scene", GUILayout.Height(60)))
        {
            //clear out any existing timeline objects
            if (GameObject.Find("TIMELINE") != null)
            {
                DestroyImmediate(GameObject.Find("TIMELINE"));
            }
            //create new timeline
            GameObject       timeline      = new GameObject("TIMELINE");
            PlayableDirector director      = timeline.AddComponent <PlayableDirector>();
            TimelineAsset    timelineAsset = CreateInstance <TimelineAsset>();
            timelineAsset.editorSettings.fps = 25;
            director.playableAsset           = timelineAsset;

            //load json into class
            string          jsonText          = File.ReadAllText(Application.dataPath + "/Resources/json/" + source.name + ".json");
            PlayerStatsList myPlayerStatsList = new PlayerStatsList();
            JsonUtility.FromJsonOverwrite(jsonText, myPlayerStatsList);

            //add abc cache to scene
            foreach (PlayerStats e in myPlayerStatsList.extras)
            {
                MyClass abcObject = new MyClass();
                abcObject.characterPath = e.abc;
                Extras.addExtras(abcObject, director, timelineAsset);
            }

            //add camera to scene
            foreach (PlayerStats c in myPlayerStatsList.cameras)
            {
                //place asset in scene
                MyClass myObject = new MyClass();
                myObject.cameraPath = c.model;
                tempobj             = (GameObject)Instantiate(Resources.Load(myObject.cameraPath), new Vector3(0, 0, 0), Quaternion.identity);
                tempobj.name        = c.name;

                //create animation track on TIMELINE
                AnimationTrack newTrack = timelineAsset.CreateTrack <AnimationTrack>(null, "Animation Track " + tempobj.name);
                director.SetGenericBinding(newTrack, tempobj);
                myObject.animPath = c.anim;
                AnimationClip animClip = Resources.Load <AnimationClip>(myObject.animPath);

                TimelineClip timelineClip = newTrack.CreateClip(animClip);
                //Turn remove start offset off to fix camera position
                var animPlayableAsset = (AnimationPlayableAsset)timelineClip.asset;
                animPlayableAsset.removeStartOffset = false;

                //make rim light
                myObject.rimPath = c.rimProfile;
                RimLight.createRimLight(tempobj, myObject.rimPath);

                //add post processing
                PostProcessing.addPostProcessing(tempobj, c.profile);
            }

            //add characters and props to scene
            foreach (PlayerStats p in myPlayerStatsList.characters)
            {
                //place asset in scene
                MyClass myObject = new MyClass();
                myObject.characterPath = p.model;
                tempobj      = (GameObject)Instantiate(Resources.Load(myObject.characterPath), new Vector3(0, 0, 0), Quaternion.identity);
                tempobj.name = p.name;

                foreach (Transform trans in tempobj.GetComponentsInChildren <Transform>(true))
                {
                    trans.gameObject.layer = LayerMask.NameToLayer("Characters");
                }
                //create animation track on TIMELINE

                AnimationTrack newTrack = timelineAsset.CreateTrack <AnimationTrack>(null, "Animation Track " + tempobj.name);
                director.SetGenericBinding(newTrack, tempobj);
                myObject.animPath = p.anim;
                AnimationClip animClip = Resources.Load <AnimationClip>(myObject.animPath);

                TimelineClip timelineClip = newTrack.CreateClip(animClip);
                //Turn remove start offset off to fix camera position
                var animPlayableAsset = (AnimationPlayableAsset)timelineClip.asset;
                animPlayableAsset.removeStartOffset = false;
            }
            //add sets to scene
            foreach (PlayerStats s in myPlayerStatsList.sets)
            {
                //place asset in scene
                MyClass myObject = new MyClass();
                myObject.setPath = s.model;
                tempobj          = (GameObject)Instantiate(Resources.Load(myObject.setPath), new Vector3(0, 0, 0), Quaternion.identity);
                tempobj.name     = s.name;
            }
            //button to add post effects if it doesn't get added automaticly (or changes)
        }
        if (GUILayout.Button("Add Post Effects"))
        {
            GameObject      cam               = GameObject.Find("CAM");
            MyClass         myObject          = new MyClass();
            string          jsonText          = File.ReadAllText(Application.dataPath + "/Resources/json/" + source.name + ".json");
            PlayerStatsList myPlayerStatsList = new PlayerStatsList();
            JsonUtility.FromJsonOverwrite(jsonText, myPlayerStatsList);
            PlayerStats c = myPlayerStatsList.cameras[0];

            PostProcessing.addPostProcessing(cam, c.profile);
        }
    }
예제 #7
0
    static void PerformBuild()
    {
        //clear out any existing timeline objects
        if (GameObject.Find("TIMELINE") != null)
        {
            DestroyImmediate(GameObject.Find("TIMELINE"));
        }
        //create new timeline
        GameObject       timeline      = new GameObject("TIMELINE");
        PlayableDirector director      = timeline.AddComponent <PlayableDirector>();
        TimelineAsset    timelineAsset = ScriptableObject.CreateInstance <TimelineAsset>();

        timelineAsset.editorSettings.fps = 25;
        director.playableAsset           = timelineAsset;


        //load json into class
        string          jsonText          = File.ReadAllText(Application.dataPath + "/Resources/json/" + GetArg("-shotName") + ".json");
        PlayerStatsList myPlayerStatsList = new PlayerStatsList();

        JsonUtility.FromJsonOverwrite(jsonText, myPlayerStatsList);

        //add abc cache to scene
        foreach (PlayerStats e in myPlayerStatsList.extras)
        {
            BuildScene.MyClass abcObject = new BuildScene.MyClass();
            abcObject.characterPath = e.abc;
            Extras.addExtras(abcObject, director, timelineAsset);
        }

        //add camera to scene
        foreach (PlayerStats c in myPlayerStatsList.cameras)
        {
            //place asset in scene
            MyClass myObject = new MyClass();
            myObject.cameraPath = c.model;
            GameObject tempobj = (GameObject)Instantiate(Resources.Load(myObject.cameraPath), new Vector3(0, 0, 0), Quaternion.identity);
            tempobj.name = c.name;

            //create animation track on TIMELINE
            AnimationTrack newTrack = timelineAsset.CreateTrack <AnimationTrack>(null, "Animation Track " + tempobj.name);
            director.SetGenericBinding(newTrack, tempobj);
            myObject.animPath = c.anim;
            AnimationClip animClip = Resources.Load <AnimationClip>(myObject.animPath);

            TimelineClip timelineClip = newTrack.CreateClip(animClip);
            //Turn remove start offset off to fix camera position
            var animPlayableAsset = (AnimationPlayableAsset)timelineClip.asset;
            animPlayableAsset.removeStartOffset = false;

            //make rim light
            myObject.rimPath = c.rimProfile;
            RimLight.createRimLight(tempobj, myObject.rimPath);

            //add post processing
            PostProcessing.addPostProcessing(tempobj, c.profile);
        }

        //loop through objects in class
        foreach (PlayerStats p in myPlayerStatsList.characters)
        {
            //place asset in scene
            MyClass myObject = new MyClass();
            myObject.characterPath = p.model;
            GameObject tempobj = (GameObject)Instantiate(Resources.Load(myObject.characterPath), new Vector3(0, 0, 0), Quaternion.identity);
            tempobj.name = p.name;
            //set objects to "Characters" layer
            foreach (Transform trans in tempobj.GetComponentsInChildren <Transform>(true))
            {
                trans.gameObject.layer = LayerMask.NameToLayer("Characters");
            }

            //create animation track on TIMELINE
            AnimationTrack newTrack = timelineAsset.CreateTrack <AnimationTrack>(null, "Animation Track " + tempobj.name);
            director.SetGenericBinding(newTrack, tempobj);
            myObject.animPath = p.anim;
            AnimationClip animClip = Resources.Load <AnimationClip>(myObject.animPath);

            TimelineClip timelineClip = newTrack.CreateClip(animClip);

            //Turn remove start offset off to fix camera position
            var animPlayableAsset = (AnimationPlayableAsset)timelineClip.asset;
            animPlayableAsset.removeStartOffset = false;
        }
        //add sets to scene
        foreach (PlayerStats s in myPlayerStatsList.sets)
        {
            //place asset in scene
            MyClass myObject = new MyClass();
            myObject.setPath = s.model;
            GameObject tempobj = (GameObject)Instantiate(Resources.Load(myObject.setPath), new Vector3(0, 0, 0), Quaternion.identity);
            tempobj.name = s.name;
        }
        //add post processing to camera

        /*
         * GameObject cam = GameObject.Find("CAM");
         * if (cam != null)
         * {
         *  cam.AddComponent<PostProcessLayer>();
         *  ppv = cam.AddComponent<PostProcessVolume>();
         *  ppp = Resources.Load<PostProcessProfile>("Profiles/MainCameraProfile1");
         *  ppv.profile = ppp;
         * }
         * else
         * {
         *  Debug.LogWarning("No Camera found. The camera must be named - CAM");
         * }
         */
        //save scene
        EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene(), GetArg("-scenePath"));
    }