Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
    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);
        }