Ejemplo n.º 1
0
        private int LocateExistingRigs(string[] rigNames, bool forceOrbital)
        {
            mOrbitals = new CinemachineOrbitalTransposer[rigNames.Length];
            m_Rigs    = new CinemachineVirtualCamera[rigNames.Length];
            int rigsFound = 0;

            foreach (Transform child in transform)
            {
                CinemachineVirtualCamera vcam = child.GetComponent <CinemachineVirtualCamera>();
                if (vcam != null)
                {
                    GameObject go = child.gameObject;
                    for (int i = 0; i < rigNames.Length; ++i)
                    {
                        if (mOrbitals[i] == null && go.name == rigNames[i])
                        {
                            // Must have an orbital transposer or it's no good
                            mOrbitals[i] = vcam.GetCinemachineComponent <CinemachineOrbitalTransposer>();
                            if (mOrbitals[i] == null && forceOrbital)
                            {
                                mOrbitals[i] = vcam.AddCinemachineComponent <CinemachineOrbitalTransposer>();
                            }
                            if (mOrbitals[i] != null)
                            {
                                mOrbitals[i].m_HeadingIsSlave = true;
                                if (i == 0)
                                {
                                    mOrbitals[i].HeadingUpdater
                                        = (CinemachineOrbitalTransposer orbital, float deltaTime, Vector3 up)
                                          => { return(orbital.UpdateHeading(deltaTime, up, ref m_XAxis)); }
                                }
                                ;
                                m_Rigs[i] = vcam;
                                ++rigsFound;
                            }
                        }
                    }
                }
            }
            return(rigsFound);
        }

        void PushSettingsToRigs()
        {
            //UnityEngine.Profiling.Profiler.BeginSample("CinemachineFreeLook.PushSettingsToRigs");
            UpdateRigCache();
            for (int i = 0; i < m_Rigs.Length; ++i)
            {
                //UnityEngine.Profiling.Profiler.BeginSample("CinemachineFreeLook.PushSettingsToRigs.m_Rigs[i] == null");
                if (m_Rigs[i] == null)
                {
                    //UnityEngine.Profiling.Profiler.EndSample();
                    continue;
                }
                //UnityEngine.Profiling.Profiler.EndSample();

                //UnityEngine.Profiling.Profiler.BeginSample("CinemachineFreeLook.PushSettingsToRigs.m_CommonLens");
                if (m_CommonLens)
                {
                    m_Rigs[i].m_Lens = m_Lens;
                }
                //UnityEngine.Profiling.Profiler.EndSample();

                // If we just deserialized from a legacy version,
                // pull the orbits and targets from the rigs
                //UnityEngine.Profiling.Profiler.BeginSample("CinemachineFreeLook.PushSettingsToRigs.mUseLegacyRigDefinitions");
                if (mUseLegacyRigDefinitions)
                {
                    mUseLegacyRigDefinitions = false;
                    m_Orbits[i].m_Height     = mOrbitals[i].m_FollowOffset.y;
                    m_Orbits[i].m_Radius     = -mOrbitals[i].m_FollowOffset.z;
                    if (m_Rigs[i].Follow != null)
                    {
                        Follow = m_Rigs[i].Follow;
                    }
                }
                m_Rigs[i].Follow = null;
                //UnityEngine.Profiling.Profiler.EndSample();

                // Hide the rigs from prying eyes
                //UnityEngine.Profiling.Profiler.BeginSample("CinemachineFreeLook.PushSettingsToRigs.Hide the rigs");
                if (CinemachineCore.sShowHiddenObjects)
                {
                    m_Rigs[i].gameObject.hideFlags
                        &= ~(HideFlags.HideInHierarchy | HideFlags.HideInInspector);
                }
                else
                {
                    m_Rigs[i].gameObject.hideFlags
                        |= (HideFlags.HideInHierarchy | HideFlags.HideInInspector);
                }
                //UnityEngine.Profiling.Profiler.EndSample();

                //UnityEngine.Profiling.Profiler.BeginSample("CinemachineFreeLook.PushSettingsToRigs.Push");
                mOrbitals[i].m_FollowOffset            = GetLocalPositionForCameraFromInput(m_YAxis.Value);
                mOrbitals[i].m_BindingMode             = m_BindingMode;
                mOrbitals[i].m_Heading                 = m_Heading;
                mOrbitals[i].m_XAxis                   = m_XAxis;
                mOrbitals[i].m_RecenterToTargetHeading = m_RecenterToTargetHeading;
                if (i > 0)
                {
                    mOrbitals[i].m_RecenterToTargetHeading.m_enabled = false;
                }

                // Hack to get SimpleFollow with heterogeneous dampings to work
                if (m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp)
                {
                    m_Rigs[i].SetStateRawPosition(State.RawPosition);
                }

                //UnityEngine.Profiling.Profiler.EndSample();
            }
            //UnityEngine.Profiling.Profiler.EndSample();
        }