/// <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); }
/// <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(); }
/// <summary> /// The GameObject has been destroyed. /// </summary> private void OnDestroy() { EventHandler.UnregisterEvent(m_GameObject, "OnRespawn", OnRespawn); }