Beispiel #1
0
        public void AssignCameraHeight(JSONNode json)
        {
            var alpha  = json["angle"].AsFloat;
            var height = CinematographyAttributes.SolveForY(target_go.transform.position, host_go.transform.position, alpha);

            host_go.transform.position = new Vector3(host_go.transform.position.x, host_go.transform.position.y + height, host_go.transform.position.z);
        }
Beispiel #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();
        }
Beispiel #3
0
        public GameObject CreateCamera(TileNode loc, FramingType scale, Orient orient, Hangle hangle, Vangle vangle)
        {
            //Debug.Log(scale);
            GameObject camHost = new GameObject();
            //camHost.transform.position = loc.transform.position;
            var cva           = camHost.AddComponent <CinemachineVirtualCamera>();
            var cbod          = camHost.AddComponent <CinemachineCameraBody>();
            var cc            = cva.AddCinemachineComponent <CinemachineComposer>();
            var cbmcp         = cva.AddCinemachineComponent <CinemachineBasicMultiChannelPerlin>();
            var camattributes = camHost.AddComponent <CamAttributesStruct>();

            camattributes.Set(scale, loc.transform.gameObject.name, orient, hangle, vangle);

            // composer parameters TODO: tweak via separate gameobject component structure
            cc.m_HorizontalDamping = 10;
            cc.m_VerticalDamping   = 10;
            cc.m_LookaheadTime     = 0.2f;
            cc.m_DeadZoneWidth     = 0.25f;
            cc.m_SoftZoneWidth     = 0.5f;

            var framing_data = FramingParameters.FramingTable[scale];

            // FStop
            cbod.IndexOfFStop = CinematographyAttributes.fStops[framing_data.DefaultFStop];
            // Lens
            cbod.IndexOfLens = CinematographyAttributes.lenses[framing_data.DefaultFocalLength];

            // set at planning time.
            //cbod.FocusTransform = target_go.transform;

            // create small amount of noise
            cbmcp = cva.AddCinemachineComponent <CinemachineBasicMultiChannelPerlin>();
            cbmcp.m_NoiseProfile  = CinematographyAttributes.standardNoise;
            cbmcp.m_AmplitudeGain = 0.5f;
            cbmcp.m_FrequencyGain = 1f;

            // worldDirectionOf Camera relative to location transform
            var camTransformDirection = DegToVector3(camattributes.OrientInt + camattributes.HangleInt);

            // calculate where to put camera
            var fakeTarget = CreateFakeTarget(actors[0].gameObject, loc.transform);
            var camDist    = CinematographyAttributes.CalcCameraDistance(fakeTarget, scale);

            GameObject.DestroyImmediate(fakeTarget);
            cbod.FocusDistance = camDist;

            // Calculate Camera Position
            camHost.transform.position = loc.transform.position + camTransformDirection * camDist;
            var height = CinematographyAttributes.SolveForY(loc.transform.position, camHost.transform.position, 0.5f, camattributes.VangleInt);

            camHost.transform.position = new Vector3(camHost.transform.position.x, height, camHost.transform.position.z);

            // Gives starting orientation of camera. At planning time, a "lookAt" parameter is set to specific target.
            camHost.transform.rotation.SetLookRotation(loc.transform.position);

            // Set Name of camera object
            camHost.name = string.Format("{0}.{1}.{2}.{3}.{4}", loc.name, scale, camattributes.targetOrientation, camattributes.hangle, camattributes.vangle);
            return(camHost);
        }
Beispiel #4
0
        public override void AssignCameraPosition(JSONNode json)
        {
            orient = json["orient"].AsFloat;
            if (json["agentOrient"] != null)
            {
                agentOrient = json["agentOrient"].AsFloat;
            }

            var ctg  = target_go.AddComponent <CinemachineTargetGroup>();
            var ctgt = new CinemachineTargetGroup.Target();

            ctgt.target = starting_location.transform;
            ctgt.weight = 1f;
            var ctgt2 = new CinemachineTargetGroup.Target();

            ctgt2.target  = OtherTarget.transform;
            ctgt2.weight  = 1f;
            ctg.m_Targets = new CinemachineTargetGroup.Target[] { ctgt, ctgt2 };

            // this line worked:
            //var directionTowardsSecondTarget = OtherTarget.transform.position - target_go.transform.position;
            //target_go.transform.position = target_go.transform.position + new Vector3(directionTowardsSecondTarget.x, 0f, directionTowardsSecondTarget.z)  / 2;

            float camDist = CinematographyAttributes.CalcCameraDistance(target_go, frame_type);

            //cva.m_LookAt = ctg.transform;

            Debug.Log("camera Distance: " + camDist.ToString());
            Debug.Log("goalDirection: " + (orient).ToString());

            cbod.FocusDistance = camDist;
            var goalDirection = DegToVector3(orient + agentOrient);

            host_go.transform.position = target_go.transform.position + goalDirection * camDist;
            host_go.transform.rotation.SetLookRotation(starting_location.transform.position);

            if (Physics.Raycast(target_go.transform.position, -goalDirection, camDist - 2))
            {
                cva.m_Lens.NearClipPlane = FindNearPlane(target_go.transform.position, goalDirection, camDist);
            }
        }
Beispiel #5
0
        public override void AssignCameraPosition(JSONNode json)
        {
            orient = json["orient"].AsFloat;
            if (json["agentOrient"] != null)
            {
                agentOrient = json["agentOrient"].AsFloat;
            }

            var camDist = CinematographyAttributes.CalcCameraDistance(target_go, frame_type);

            cbod.FocusDistance = camDist;
            var goalDirection = DegToVector3(orient + agentOrient);

            host_go.transform.position = target_go.transform.position + goalDirection * camDist;
            host_go.transform.rotation.SetLookRotation(starting_location.transform.position);

            if (Physics.Raycast(target_go.transform.position, -goalDirection, camDist - 2))
            {
                cva.m_Lens.NearClipPlane = FindNearPlane(target_go.transform.position, goalDirection, camDist);
            }

            CreateClearShot();
        }