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