Exemplo n.º 1
0
        /// <summary>
        /// The camera has been destroyed.
        /// </summary>
        private void OnDestroy()
        {
            OnAttachCharacter(null);
#if THIRD_PERSON_CONTROLLER
            if (m_ObjectFader != null)
            {
                m_ObjectFader.IndependentCharacterFadeCount -= 1;
            }
#endif
            EventHandler.UnregisterEvent <GameObject>(m_CameraController.gameObject, "OnCameraAttachCharacter", OnAttachCharacter);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Attaches the component to the specified character.
        /// </summary>
        /// <param name="character">The handler to attach the camera to.</param>
        protected virtual void OnAttachCharacter(GameObject character)
        {
            // Don't do anything if the character is the same.
            if (m_Character != null && character == m_Character)
            {
                return;
            }

            if (m_Character != null)
            {
                // The character is being changed.
                if (m_FirstPersonRenderers != null)
                {
                    m_AddedFirstPersonRenderers.Clear();
                    m_FirstPersonRenderers.Clear();
                    m_FirstPersonOriginalMaterials.Clear();
                    m_FirstPersonInvisibleMaterials.Clear();
                    m_FirstPersonBaseObjects.Clear();
                }
                if (m_ThirdPersonRenderers != null)
                {
                    m_AddedThirdPersonRenderers.Clear();
                    m_ThirdPersonRenderers.Clear();
                    m_ThirdPersonOriginalMaterials.Clear();
                    m_ThirdPersonInvisibleMaterials.Clear();
                }
                EventHandler.UnregisterEvent <bool>(m_Character, "OnCameraChangePerspectives", OnChangePerspectives);
                EventHandler.UnregisterEvent <Item>(m_Character, "OnInventoryAddItem", OnAddItem);
                EventHandler.UnregisterEvent(m_Character, "OnRespawn", OnRespawn);
                m_Character = null;
            }

            enabled = !m_ManualSwap && character != null;
            if (character == null)
            {
                return;
            }

            var characterLocomotion = character.GetCachedComponent <UltimateCharacterLocomotion>();

            m_Character = characterLocomotion.gameObject;
            m_FirstPersonPerspective = characterLocomotion.FirstPersonPerspective;
#if THIRD_PERSON_CONTROLLER
            // Force the character into using third person materials so the correct materials can be cached.
            var perspectiveMonitor = character.GetCachedComponent <ThirdPersonController.Character.PerspectiveMonitor>();
            if (perspectiveMonitor != null)
            {
                perspectiveMonitor.UpdateThirdPersonMaterials(true);
            }
#endif

            if ((m_SwapMask & SwapMask.FirstPerson) != 0)
            {
                var firstPersonBaseObjects = character.GetComponentsInChildren <FirstPersonBaseObject>(true);
                for (int i = 0; i < firstPersonBaseObjects.Length; ++i)
                {
                    CacheFirstPersonRenderers(firstPersonBaseObjects[i].gameObject);
                    // Remember the base objects so they are not added again if a runtime item is picked up.
                    m_FirstPersonBaseObjects.Add(firstPersonBaseObjects[i].gameObject);
                }
            }

            if ((m_SwapMask & SwapMask.ThirdPerson) != 0)
            {
                var thirdPersonObjects = character.GetComponentsInChildren <ThirdPersonObject>(true);
                for (int i = 0; i < thirdPersonObjects.Length; ++i)
                {
                    CacheThirdPersonRenderers(thirdPersonObjects[i].gameObject);
                }
            }

#if THIRD_PERSON_CONTROLLER
            if (perspectiveMonitor != null)
            {
                perspectiveMonitor.UpdateThirdPersonMaterials(false);
            }
#endif

            EventHandler.RegisterEvent <bool>(m_Character, "OnCameraChangePerspectives", OnChangePerspectives);
            EventHandler.RegisterEvent <Item>(m_Character, "OnInventoryAddItem", OnAddItem);
            EventHandler.RegisterEvent(m_Character, "OnRespawn", OnRespawn);

            // Assume the first person objects are not rendering.
            EnableThirdPersonMaterials();
        }
Exemplo n.º 3
0
 /// <summary>
 /// The GameObject has been destroyed.
 /// </summary>
 private void OnDestroy()
 {
     EventHandler.UnregisterEvent(m_GameObject, "OnRespawn", OnRespawn);
 }