public NavigateFabulaClip(JSONNode json, TimelineAsset p_timeline, PlayableDirector p_director) : base(json, p_timeline, p_director) { ending_location = GameObject.Find(json["end_pos_name"]); Vector3 dest_minus_origin = ending_location.transform.position - starting_location.transform.position; float orientation = Mathf.Atan2(dest_minus_origin.z, -dest_minus_origin.x) * Mathf.Rad2Deg; var tempstart = new Vector3(starting_location.transform.position.x, agent.transform.position.y, starting_location.transform.position.z); Transform start_transform = MakeCustomizedTransform(tempstart, orientation).transform; var nav_track_clip = TrackAttributes.LerpTrackManager.CreateClip(start, duration, Name); nav_track_clip.start = start; nav_track_clip.duration = duration; LerpMoveObjectAsset lerp_clip = nav_track_clip.asset as LerpMoveObjectAsset; var tempend = new Vector3(ending_location.transform.position.x, agent.transform.position.y, ending_location.transform.position.z); Transform end_transform = MakeCustomizedTransform(tempend, orientation).transform; TransformBind(lerp_clip, agent, start_transform, end_transform); // control track - animate control_track_clip = ctrack.CreateDefaultClip(); control_track_clip.start = start; //+ 0.06f; control_track_clip.duration = duration; // - 0.06f; control_track_clip.displayName = Name; controlAnim = control_track_clip.asset as ControlPlayableAsset; AnimateBind(controlAnim, animTimelineObject); }
public override void AssignCameraPosition(JSONNode json) { float orient = json["orient"].AsFloat; Vector3 dest_minus_start = (ending_location.transform.position - starting_location.transform.position).normalized; orientation = Mathf.Atan2(dest_minus_start.x, -dest_minus_start.z) * Mathf.Rad2Deg - 90f; var goal_direction = DegToVector3(orient + orientation); agentStartPosition = starting_location.transform.position + dest_minus_start * start_disc_offset; agentEndPosition = starting_location.transform.position + dest_minus_start * end_disc_offset; agentMidPosition = agentStartPosition + (agentEndPosition - agentStartPosition) / 2; //Debug.Log(agentStartPosition.ToString() + agentEndPosition.ToString() + agentMidPosition.ToString()); focusTarget = new GameObject(); focusTarget.transform.position = agentMidPosition; var bc = focusTarget.AddComponent <BoxCollider>(); bc.size = agent.GetComponent <BoxCollider>().size; float camDist = CinematographyAttributes.CalcCameraDistance(focusTarget, frame_type); //Debug.Log("camera Distance: " + camDist.ToString()); //Debug.Log("goalDirection: " + (orient + orientation).ToString()); cbod.FocusDistance = camDist; var camHeight = .75f * bc.size.y; // position of camera's height depends on angle host_go.transform.position = agentMidPosition + (goal_direction * camDist) + new Vector3(0f, camHeight, 0f);; //+ new Vector3(0f, target_go.transform.position.y, 0f); host_go.transform.rotation.SetLookRotation(agentMidPosition); if (json["follow_target"] != null) { nav_track_clip = ntrack.CreateClip <LerpMoveObjectAsset>(); nav_track_clip.start = start + 0.16f; nav_track_clip.duration = duration - 0.16f; LerpMoveObjectAsset lerp_clip = nav_track_clip.asset as LerpMoveObjectAsset; GameObject camera_destination = new GameObject(); camera_destination.name = "camera lerp destination"; Vector3 end_camera = ending_location.transform.position + (goal_direction * json["target_distance"].AsFloat) + new Vector3(0f, HEIGHT, 0f); camera_destination.transform.position = end_camera; GameObject camera_origin = new GameObject(); camera_origin.name = "camera lerp origin"; camera_origin.transform.position = host_go.transform.position; TransformBind(lerp_clip, host_go, camera_origin.transform, camera_destination.transform); } //var fwd = host_go.transform.TransformDirection(Vector3.forward); if (Physics.Raycast(target_go.transform.position, -goal_direction, camDist - 2)) { cva.m_Lens.NearClipPlane = FindNearPlane(target_go.transform.position, goal_direction, camDist); } // create clear shot 8 cameras CreateClearShot(); }
// Update is called once per frame private void populateAnimation(FabulaClip clip) { // 3 game objects agent = GameObject.Find(clip.gameobject_name); location = GameObject.Find(clip.startingPos_string); animTimelineObject = GameObject.Find(clip.animation_string); // control track control_track_clip = ctrack.CreateDefaultClip(); control_track_clip.start = clip.start + (float)0.12; control_track_clip.duration = clip.duration - (float)0.12; control_track_clip.displayName = clip.Name; controlAnim = control_track_clip.asset as ControlPlayableAsset; AnimateBind(controlAnim, animTimelineObject); // nav track nav_track_clip = ntrack.CreateClip <LerpMoveObjectAsset>(); nav_track_clip.start = clip.start; nav_track_clip.displayName = clip.Name; nav_track_clip.duration = 0.11; LerpMoveObjectAsset tp_obj = nav_track_clip.asset as LerpMoveObjectAsset; TransformBind(tp_obj, agent, agent.transform, makeCustomizedTransform(location.transform.position, clip.orientation).transform); //setClipOffset(animTimelineObject, anim_loc, anim_rot); }
public void TransformBind(LerpMoveObjectAsset tpObj, GameObject obj_to_move, Transform start_pos, Transform end_pos) { tpObj.ObjectToMove.exposedName = UnityEditor.GUID.Generate().ToString(); tpObj.LerpMoveTo.exposedName = UnityEditor.GUID.Generate().ToString(); tpObj.LerpMoveFrom.exposedName = UnityEditor.GUID.Generate().ToString(); playableDirector.SetReferenceValue(tpObj.ObjectToMove.exposedName, obj_to_move); playableDirector.SetReferenceValue(tpObj.LerpMoveTo.exposedName, end_pos); playableDirector.SetReferenceValue(tpObj.LerpMoveFrom.exposedName, start_pos); }
public void SimpleLerpClip(GameObject agent, Transform startPos, Transform goalPos, ClipInfo CI) { var lerpClip = lerpTrack.CreateClip <LerpMoveObjectAsset>(); lerpClip.start = CI.start; lerpClip.duration = CI.duration; lerpClip.displayName = string.Format("SimpleLerp {0}-{1}", startPos.name, goalPos.name); LerpMoveObjectAsset lerp_clip = lerpClip.asset as LerpMoveObjectAsset; TransformBind(lerp_clip, agent, startPos, goalPos); }
public void SimpleLerpClip(GameObject agent, Transform startPos, Transform goalPos) { Vector3 dest_minus_origin = goalPos.position - startPos.position; float orientation = Mathf.Atan2(dest_minus_origin.z, -dest_minus_origin.x) * Mathf.Rad2Deg; var lerpClip = TrackAttributes.LerpTrackManager.CreateClip(start, duration, display); lerpClip.start = start; lerpClip.duration = duration; LerpMoveObjectAsset lerp_clip = lerpClip.asset as LerpMoveObjectAsset; //goalPos.rotation = Quaternion.Euler(0f, orientation, 0f); TransformBind(lerp_clip, agent, Clip.MakeCustomizedTransform(startPos.position, orientation).transform, Clip.MakeCustomizedTransform(goalPos.position, orientation).transform); }
private void populateNavCam(DiscourseClip clip) { string name = clip.Name; float start = clip.start + 0.06f; float duration = clip.duration - 0.06f; float fov = clip.fov; float fab_start = clip.fabulaStart; GameObject starting_loc = GameObject.Find(clip.startingPos_string); float start_offset = clip.start_dist_offset; GameObject ending_loc = GameObject.Find(clip.endingPos_string); float end_offset = clip.end_dist_offset; float orient = clip.targetOrientation; agent = GameObject.Find(clip.aimTarget); // create position of target GameObject target_go = new GameObject(); target_go.name = "target_" + clip.Name; target_go.transform.position = agent.transform.position + new Vector3(0f, HEIGHT, 0f); target_go.transform.parent = agent.transform; Vector3 dest_minus_start = (ending_loc.transform.position - starting_loc.transform.position).normalized; Vector3 agent_starting_position = starting_loc.transform.position + dest_minus_start * start_offset; Vector3 agent_middle_position = agent_starting_position + dest_minus_start * (end_offset / 2); GameObject go = new GameObject(); go.name = clip.Name; float orientation = Mathf.Atan2(dest_minus_start.x, -dest_minus_start.z) * Mathf.Rad2Deg - 90f; Vector3 goal_direction = degToVector3(orient + orientation); //Debug.Log(orient + orientation); go.transform.position = agent_middle_position + (goal_direction * clip.targetDistance) + new Vector3(0f, HEIGHT, 0f); go.transform.rotation.SetLookRotation(agent_starting_position); CinemachineVirtualCamera cva = go.AddComponent <CinemachineVirtualCamera>(); CinemachineComposer cc = cva.AddCinemachineComponent <CinemachineComposer>(); cc.m_DeadZoneWidth = 0.5f; cc.m_SoftZoneWidth = 0.8f; cva.m_Lens.FieldOfView = clip.fov; cva.m_LookAt = target_go.transform; CinemachineBasicMultiChannelPerlin cbmcp = cva.AddCinemachineComponent <CinemachineBasicMultiChannelPerlin>(); cbmcp.m_NoiseProfile = Instantiate(Resources.Load("Handheld_tele_mild", typeof(NoiseSettings))) as NoiseSettings; cbmcp.m_AmplitudeGain = 0.5f; cbmcp.m_FrequencyGain = 1f; if (clip.followTarget != null) { nav_track_clip = ntrack.CreateClip <LerpMoveObjectAsset>(); nav_track_clip.start = clip.start + 0.16f; nav_track_clip.duration = clip.duration - 0.16f; LerpMoveObjectAsset lerp_clip = nav_track_clip.asset as LerpMoveObjectAsset; GameObject camera_destination = new GameObject(); camera_destination.name = "camera lerp destination"; Vector3 end_camera = ending_loc.transform.position + (goal_direction * clip.targetDistance) + new Vector3(0f, HEIGHT, 0f); camera_destination.transform.position = end_camera; GameObject camera_origin = new GameObject(); camera_origin.name = "camera lerp origin"; camera_origin.transform.position = go.transform.position; TransformBind(lerp_clip, go, camera_origin.transform, camera_destination.transform); } bool has_fab_switch = false; if (clip.fabulaStart >= 0f) { has_fab_switch = true; GameObject ttravel = Instantiate(Resources.Load("time_travel", typeof(GameObject))) as GameObject; ttravel.transform.parent = go.transform; ttravel.GetComponent <timeStorage>().fab_time = clip.fabulaStart; TimelineClip tc = ctrack.CreateDefaultClip(); tc.start = clip.start; tc.duration = clip.duration; tc.displayName = "Time Travel"; var time_travel_clip = tc.asset as ControlPlayableAsset; AnimateBind(time_travel_clip, ttravel); } // default clip attributes film_track_clip = ftrack.CreateDefaultClip(); if (has_fab_switch) { start = clip.start + (float)0.06; duration = clip.duration; } film_track_clip.start = start; film_track_clip.duration = duration; film_track_clip.displayName = clip.Name; // specialize and bind var cinemachineShot = film_track_clip.asset as CinemachineShot; CamBind(cinemachineShot, cva); }
private void populateNavigation(FabulaClip clip) { agent = GameObject.Find(clip.gameobject_name); starting_location = GameObject.Find(clip.startingPos_string); location = GameObject.Find(clip.endingPos_string); var animTimelineObject_template = GameObject.Find(clip.animation_string); animTimelineObject = Instantiate(animTimelineObject_template); var director01 = animTimelineObject.GetComponent <PlayableDirector>(); var timeline = director01.playableAsset as TimelineAsset; foreach (var track in timeline.GetOutputTracks()) { var animTrack = track as AnimationTrack; if (animTrack == null) { continue; } var binding = director01.GetGenericBinding(animTrack); if (binding == null) { continue; } // the binding can be an animator or game object with an animator //var animator = binding as Animator; //var gameobject_original = binding as GameObject; //var animator01 = gameObject.GetComponent<Animator>(); director01.SetGenericBinding(animTrack, agent.GetComponent <Animator>()); } // get vector3 corresponding to destination - origin Vector3 dest_minus_origin = location.transform.position - starting_location.transform.position; float orientation = Mathf.Atan2(dest_minus_origin.x, -dest_minus_origin.z) * Mathf.Rad2Deg - 90f; //float orientation = Mathf.Atan2(location.transform.position.z, -location.transform.position.x) * Mathf.Rad2Deg; //nav_track_clip = ntrack.CreateClip<LerpMoveObjectAsset1>(); //nav_track_clip.start = clip.start; //nav_track_clip.displayName = clip.Name + "_transport"; //nav_track_clip.duration = 0.11; //LerpMoveObjectAsset1 tp_obj = nav_track_clip.asset as LerpMoveObjectAsset1; Transform start_transform = makeCustomizedTransform(starting_location.transform.position, orientation).transform; //TransformBind1(tp_obj, agent, start_transform); nav_track_clip2 = ntrack.CreateClip <LerpMoveObjectAsset>(); //nav_track_clip2.start = clip.start + (float)0.12; //nav_track_clip2.duration = clip.duration - (float)0.12; nav_track_clip2.start = clip.start; nav_track_clip2.duration = clip.duration; LerpMoveObjectAsset lerp_clip = nav_track_clip2.asset as LerpMoveObjectAsset; Transform end_transform = makeCustomizedTransform(location.transform.position, orientation).transform; TransformBind(lerp_clip, agent, start_transform, end_transform); // control track - animate control_track_clip = ctrack.CreateDefaultClip(); control_track_clip.start = clip.start + (float)0.12; control_track_clip.duration = clip.duration - (float)0.12; control_track_clip.displayName = clip.Name; controlAnim = control_track_clip.asset as ControlPlayableAsset; AnimateBind(controlAnim, animTimelineObject); //FabulaAction FA = new FabulaAction(); //FA.start = (float)control_track_clip.start; //FA.duration = (float)control_track_clip.duration; //FA.NavObj = agent; //FA.end_pos = end_transform.position; //FA.start_pos = start_transform.position; //FA.orientation = orientation; //navDict.Add(clip.Name, FA); }