Пример #1
0
        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;
    }
Пример #3
0
    // 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);
 }
Пример #5
0
        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);
 }
Пример #7
0
 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);
 }
Пример #9
0
 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);
 }
Пример #10
0
        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);
        }