Beispiel #1
0
    // Start is called before the first frame update
    static public void addExtras(BuildScene.MyClass abcObject, PlayableDirector director, TimelineAsset timelineAsset)
    {
        GameObject abcobj = (GameObject)Instantiate(Resources.Load(abcObject.characterPath), new Vector3(0, 0, 0), Quaternion.identity);

        abcobj.name = "extras";


        //create animation track on TIMELINE
        AlembicTrack newTrack = timelineAsset.CreateTrack <AlembicTrack>(null, abcobj.name);

        director.SetGenericBinding(newTrack, abcobj);
        //abcObject.animPath = e.anim;
        AnimationClip animClip = Resources.Load <AnimationClip>(abcObject.animPath);

        TimelineClip timelineClip = newTrack.CreateDefaultClip();

        //var abcPlayableAsset = (PlayableAsset)timelineClip.asset;
        //abcPlayableAsset.

        //TrackAsset timelineClip.CreateDefaultClip();
    }
Beispiel #2
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"));
    }