// 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(); }
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")); }