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