private CinemachineVirtualCamera[] CreateRigs(CinemachineVirtualCamera[] copyFrom) { // Invalidate the cache mOrbitals = null; float[] softCenterDefaultsV = new float[] { 0.5f, 0.55f, 0.6f }; CinemachineVirtualCamera[] newRigs = new CinemachineVirtualCamera[3]; for (int i = 0; i < RigNames.Length; ++i) { CinemachineVirtualCamera src = null; if (copyFrom != null && copyFrom.Length > i) { src = copyFrom[i]; } if (CreateRigOverride != null) { newRigs[i] = CreateRigOverride(this, RigNames[i], src); } else { // Create a new rig with default components GameObject go = new GameObject(RigNames[i]); go.transform.parent = transform; newRigs[i] = go.AddComponent <CinemachineVirtualCamera>(); if (src != null) { ReflectionHelpers.CopyFields(src, newRigs[i]); } else { go = newRigs[i].GetComponentOwner().gameObject; go.AddComponent <CinemachineOrbitalTransposer>(); go.AddComponent <CinemachineComposer>(); } } // Set up the defaults newRigs[i].InvalidateComponentPipeline(); CinemachineOrbitalTransposer orbital = newRigs[i].GetCinemachineComponent <CinemachineOrbitalTransposer>(); if (orbital == null) { orbital = newRigs[i].AddCinemachineComponent <CinemachineOrbitalTransposer>(); // should not happen } if (src == null) { // Only set defaults if not copying CinemachineComposer composer = newRigs[i].GetCinemachineComponent <CinemachineComposer>(); if (composer != null) { composer.m_HorizontalDamping = composer.m_VerticalDamping = 0; composer.m_ScreenX = 0.5f; composer.m_ScreenY = softCenterDefaultsV[i]; composer.m_DeadZoneWidth = composer.m_DeadZoneHeight = 0; composer.m_SoftZoneWidth = composer.m_SoftZoneHeight = 0.8f; composer.m_BiasX = composer.m_BiasY = 0; } } } return(newRigs); }
// Start is called before the first frame update void Start() { cameraControl = virtualCamera.GetCinemachineComponent <Cinemachine.CinemachineOrbitalTransposer>(); radius = Vector3.Distance(transform.position, cameraControl.FollowTarget.transform.position); rotationDegrees = cameraControl.m_Heading.m_Bias; }
// Start is called before the first frame update private void Awake() { animator = GetComponent <Animator>(); //playerInput = ReInput.players.GetPlayer(0); orbital = vcam.GetCinemachineComponent <Cinemachine.CinemachineOrbitalTransposer>(); cameraOffset = mainCamera.transform.position - transform.position; cameraOffset = new Vector3(cameraOffset.x, 0, cameraOffset.z); }
private static string GetFullName(GameObject current) { if (current == null) { return(string.Empty); } if (current.transform.parent == null) { return("/" + current.name); } return(CinemachineOrbitalTransposer.GetFullName(current.transform.parent.gameObject) + "/" + current.name); }
float UpdateXAxisHeading(CinemachineOrbitalTransposer orbital, float deltaTime, Vector3 up) { var oldValue = m_XAxis.Value; float headng = orbital.UpdateHeading(deltaTime, up, ref m_XAxis); // Allow externally-driven values to work in this mode if (orbital.m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp) { m_XAxis.Value = oldValue; } return(headng); }
float UpdateXAxisHeading(CinemachineOrbitalTransposer orbital, float deltaTime, Vector3 up) { if (mOrbitals != null && mOrbitals[1] == orbital) { var oldValue = m_XAxis.Value; CachedXAxisHeading = orbital.UpdateHeading( deltaTime, up, ref m_XAxis, ref m_RecenterToTargetHeading, CinemachineCore.Instance.IsLive(this)); // Allow externally-driven values to work in this mode if (m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp) { m_XAxis.Value = oldValue; } } return(CachedXAxisHeading); }
float UpdateXAxisHeading(CinemachineOrbitalTransposer orbital, float deltaTime, Vector3 up) { if (MasterOrbital == null) { MasterOrbital = orbital; } if (MasterOrbital == orbital) { var oldValue = m_XAxis.Value; CachedXAxisHeading = orbital.UpdateHeading( deltaTime, up, ref m_XAxis, ref m_RecenterToTargetHeading); // Allow externally-driven values to work in this mode if (orbital.m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp) { m_XAxis.Value = oldValue; } } return(CachedXAxisHeading); }
float UpdateXAxisHeading(CinemachineOrbitalTransposer orbital, float deltaTime, Vector3 up) { if (this == null) { return(0); // deleted } // Update the axis only once per frame if (m_LastHeadingUpdateFrame != Time.frameCount) { m_LastHeadingUpdateFrame = Time.frameCount; var oldValue = m_XAxis.Value; m_CachedXAxisHeading = orbital.UpdateHeading( PreviousStateIsValid ? deltaTime : -1, up, ref m_XAxis, ref m_RecenterToTargetHeading, CinemachineCore.Instance.IsLive(this)); // Allow externally-driven values to work in this mode if (m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp) { m_XAxis.Value = oldValue; } } return(m_CachedXAxisHeading); }
private CinemachineVirtualCamera[] CreateRigs(CinemachineVirtualCamera[] copyFrom) { this.mOrbitals = null; float[] array = new float[] { 0.5f, 0.55f, 0.6f }; CinemachineVirtualCamera[] array2 = new CinemachineVirtualCamera[3]; for (int i = 0; i < CinemachineFreeLook.RigNames.Length; i++) { CinemachineVirtualCamera cinemachineVirtualCamera = null; if (copyFrom != null && copyFrom.Length > i) { cinemachineVirtualCamera = copyFrom[i]; } if (CinemachineFreeLook.CreateRigOverride != null) { array2[i] = CinemachineFreeLook.CreateRigOverride(this, CinemachineFreeLook.RigNames[i], cinemachineVirtualCamera); } else { array2[i] = new GameObject(CinemachineFreeLook.RigNames[i]) { transform = { parent = base.transform } }.AddComponent <CinemachineVirtualCamera>(); if (cinemachineVirtualCamera != null) { ReflectionHelpers.CopyFields(cinemachineVirtualCamera, array2[i], BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } else { GameObject gameObject = array2[i].GetComponentOwner().gameObject; gameObject.AddComponent <CinemachineOrbitalTransposer>(); gameObject.AddComponent <CinemachineComposer>(); } } array2[i].InvalidateComponentPipeline(); CinemachineOrbitalTransposer cinemachineOrbitalTransposer = array2[i].GetCinemachineComponent <CinemachineOrbitalTransposer>(); if (cinemachineOrbitalTransposer == null) { cinemachineOrbitalTransposer = array2[i].AddCinemachineComponent <CinemachineOrbitalTransposer>(); } if (cinemachineVirtualCamera == null) { cinemachineOrbitalTransposer.m_YawDamping = 0f; CinemachineComposer cinemachineComponent = array2[i].GetCinemachineComponent <CinemachineComposer>(); if (cinemachineComponent != null) { cinemachineComponent.m_HorizontalDamping = (cinemachineComponent.m_VerticalDamping = 0f); cinemachineComponent.m_ScreenX = 0.5f; cinemachineComponent.m_ScreenY = array[i]; cinemachineComponent.m_DeadZoneWidth = (cinemachineComponent.m_DeadZoneHeight = 0.1f); cinemachineComponent.m_SoftZoneWidth = (cinemachineComponent.m_SoftZoneHeight = 0.8f); cinemachineComponent.m_BiasX = (cinemachineComponent.m_BiasY = 0f); } } } return(array2); }
private void CreateRigs(CinemachineVirtualCamera[] copyFrom) { // Invalidate the cache m_Rigs = null; mOribitals = null; string[] rigNames = RigNames; float[] softCenterDefaultsV = new float[] { 0.5f, 0.55f, 0.6f }; for (int i = 0; i < rigNames.Length; ++i) { CinemachineVirtualCamera src = null; if (copyFrom != null && copyFrom.Length > i) { src = copyFrom[i]; } CinemachineVirtualCamera rig = null; if (CreateRigOverride != null) { rig = CreateRigOverride(this, rigNames[i], src); } else { // If there is an existing rig with this name, delete it List <Transform> list = new List <Transform>(); foreach (Transform child in transform) { if (child.GetComponent <CinemachineVirtualCamera>() != null && child.gameObject.name == rigNames[i]) { list.Add(child); } } foreach (Transform child in list) { DestroyImmediate(child.gameObject); } // Create a new rig with default components GameObject go = new GameObject(rigNames[i]); go.transform.parent = transform; rig = go.AddComponent <CinemachineVirtualCamera>(); if (src != null) { ReflectionHelpers.CopyFields(src, rig); } else { go = rig.GetComponentOwner().gameObject; go.AddComponent <CinemachineOrbitalTransposer>(); go.AddComponent <CinemachineComposer>(); } } // Set up the defaults rig.InvalidateComponentPipeline(); CinemachineOrbitalTransposer orbital = rig.GetCinemachineComponent <CinemachineOrbitalTransposer>(); if (orbital == null) { orbital = rig.AddCinemachineComponent <CinemachineOrbitalTransposer>(); // should not happen } if (src == null) { // Only set defaults if not copying orbital.m_Radius = DefaultRadius[i]; orbital.m_HeightOffset = DefaultHeight[i]; CinemachineComposer composer = rig.GetCinemachineComponent <CinemachineComposer>(); if (composer != null) { composer.m_HorizontalDamping = composer.m_VerticalDamping = 0; composer.m_ScreenX = 0.5f; composer.m_ScreenY = softCenterDefaultsV[i]; composer.m_DeadZoneWidth = composer.m_DeadZoneHeight = 0; composer.m_SoftZoneWidth = composer.m_SoftZoneHeight = 0.8f; composer.m_BiasX = composer.m_BiasY = 0; } } } }
private float GetTargetHeading(float currentHeading, Quaternion targetOrientation, float deltaTime) { if (this.m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp) { return(0f); } if (base.FollowTarget == null) { return(currentHeading); } if (this.m_Heading.m_HeadingDefinition == CinemachineOrbitalTransposer.Heading.HeadingDefinition.Velocity && this.mTargetRigidBody == null) { Debug.Log(string.Format("Attempted to use HeadingDerivationMode.Velocity to calculate heading for {0}. No RigidBody was present on '{1}'. Defaulting to position delta", CinemachineOrbitalTransposer.GetFullName(base.VirtualCamera.VirtualCameraGameObject), base.FollowTarget)); this.m_Heading.m_HeadingDefinition = CinemachineOrbitalTransposer.Heading.HeadingDefinition.PositionDelta; } Vector3 vector = Vector3.zero; switch (this.m_Heading.m_HeadingDefinition) { case CinemachineOrbitalTransposer.Heading.HeadingDefinition.PositionDelta: vector = base.FollowTarget.position - this.mLastTargetPosition; goto IL_E9; case CinemachineOrbitalTransposer.Heading.HeadingDefinition.Velocity: vector = this.mTargetRigidBody.velocity; goto IL_E9; case CinemachineOrbitalTransposer.Heading.HeadingDefinition.TargetForward: vector = base.FollowTarget.forward; goto IL_E9; } return(0f); IL_E9: int num = this.m_Heading.m_VelocityFilterStrength * 5; if (this.mHeadingTracker == null || this.mHeadingTracker.FilterSize != num) { this.mHeadingTracker = new CinemachineOrbitalTransposer.HeadingTracker(num); } this.mHeadingTracker.DecayHistory(); Vector3 vector2 = targetOrientation * Vector3.up; vector = vector.ProjectOntoPlane(vector2); if (!vector.AlmostZero()) { this.mHeadingTracker.Add(vector); } vector = this.mHeadingTracker.GetReliableHeading(); if (!vector.AlmostZero()) { return(UnityVectorExtensions.SignedAngle(targetOrientation * Vector3.forward, vector, vector2)); } return(currentHeading); }