public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label) { float vSpace = 0; float hSpace = 3; float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f; GUIContent timeText = new GUIContent("sec"); var textDimensions = GUI.skin.label.CalcSize(timeText); rect = EditorGUI.PrefixLabel(rect, label); rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight; rect.width -= hSpace + floatFieldWidth + textDimensions.x; CinemachineBlendDefinition myClass = new CinemachineBlendDefinition(); // to access name strings SerializedProperty styleProp = property.FindPropertyRelative(() => myClass.m_Style); EditorGUI.PropertyField(rect, styleProp, GUIContent.none); if (styleProp.intValue != (int)CinemachineBlendDefinition.Style.Cut) { rect.x += rect.width + hSpace; rect.width = floatFieldWidth; SerializedProperty timeProp = property.FindPropertyRelative(() => myClass.m_Time); EditorGUI.PropertyField(rect, timeProp, GUIContent.none); rect.x += floatFieldWidth; rect.width = textDimensions.x; EditorGUI.LabelField(rect, timeText); } }
public void OnPause() { HideWorldSpaceUI(); // Set default camera mode to Cut defaultBlendTemp = brain.m_DefaultBlend; brain.m_DefaultBlend.m_Style = CinemachineBlendDefinition.Style.Cut; }
/// <summary> /// <see cref="RequestChangeCM(CMType)"/> /// </summary> private void DoLateUpdate_ChangeCM(float deltaTime) { m_ChangingCMBlendReaminTime = Mathf.Max(0.0f, m_ChangingCMBlendReaminTime - deltaTime); if (m_ChangingCMBlendReaminTime > 0 || m_ChangingCMs.Count == 0 || CinemachineCore.Instance.BrainCount > 1) { return; } CMType cmType = m_ChangingCMs.Dequeue(); if (m_LastCMType == cmType) { Leyoutech.Utility.DebugUtility.LogWarning(CameraManager.LOG_TAG, "Repeat change CM to " + cmType); return; } if (!m_MainCMBrain.enabled) { m_MainCMBrain.enabled = true; } CinemachineBlendDefinition cinemachineBlendDefinition = m_MainCMBrain.m_CustomBlends.GetBlendForVirtualCameras(m_LastCMType.ToString(), cmType.ToString(), m_MainCMBrain.m_DefaultBlend); Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG , string.Format("Change CM form {0} to {1} use blend definition Style:{2} Time:{3}" , m_LastCMType , cmType , cinemachineBlendDefinition.m_Style , cinemachineBlendDefinition.m_Time)); try { Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG, "Begin invoke CM Changed"); _OnCMChanged?.Invoke(m_LastCMType, cmType); Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG, "End invoke CM Changed"); } catch (Exception e) { Leyoutech.Utility.DebugUtility.LogError(CameraManager.LOG_TAG, "Invoke CM Changed Exception:\n" + e.ToString()); } m_ChangingCMBlendReaminTime = cinemachineBlendDefinition.m_Time; TransitionBlendDefinition transitionBlendDefinition = m_MainCameraTransitionBlenderSettings.FindBlend(m_LastCMType.ToString(), cmType.ToString()); m_CMs[(int)cmType].ApplyTransitionBlendDefinition(transitionBlendDefinition); m_CMs[(int)cmType].SetEnable(true); if (m_LastCMType != CMType.Notset) { m_CMs[(int)m_LastCMType].SetEnable(false); } m_LastCMType = cmType; }
public void AddBlendSetting(string fromBlend, string toBlend, CinemachineBlendDefinition blendDef) { CinemachineBlenderSettings.CustomBlend blend; blend.m_From = fromBlend; blend.m_To = toBlend; blend.m_Blend = blendDef; blends.Add(blend); blenderSetting.m_CustomBlends = blends.ToArray(); Camera.main.GetComponent <CinemachineBrain>().m_CustomBlends = blenderSetting; }
public void StartPuzzle() { if (_isCoolingDown) { return; } // Get camera, even if we have no persistent scene if (CameraDirector.IsLoaded) { brain = CameraDirector.Camera.GetComponent <CinemachineBrain>(); } else { brain = Camera.main.GetComponent <CinemachineBrain>(); } // cache the old cinemachine blend mode, replace it with ours oldBlend = brain.m_DefaultBlend; brain.m_DefaultBlend = new CinemachineBlendDefinition(CinemachineBlendDefinition.Style.EaseInOut, transitionTime); // ease into the TransitionCam transitionCam.Priority = 100; // lock the player PlayerMovement player; if (PlayerManager.IsLoaded) { player = PlayerManager.CurrentPlayer.GetComponent <PlayerMovement>(); } else { player = GameObject.FindWithTag("Player").GetComponent <PlayerMovement>(); } player.ChangeState(PlayerMovement.PlayerState.Locked); // activate ourselves, deactivate children so they don't show. // @NOTE: We need to be active so that we can run the coroutine gameObject.SetActive(true); for (int i = 0; i < transform.childCount; i++) { transform.GetChild(i).gameObject.SetActive(false); } StartCoroutine(TransitionIn()); }
private void InitBattleCameras(GolfCameraType initType) { CameraM = new GolfCameraManage(GolfCameraType.Sky); CameraM.AddCamera(new GolfCamera(GolfCameraType.Sky, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0))); CameraM.AddCamera(new GolfCamera(GolfCameraType.Drive2Fly, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0))); CameraM.AddCamera(new GolfCamera(GolfCameraType.Drive2Roll, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0))); CameraM.AddCamera(new GolfCamera(GolfCameraType.Fly2Land, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0))); CameraM.AddCamera(new GolfCamera(GolfCameraType.Land2Roll, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0))); CameraM.AddCamera(new GolfCamera(GolfCameraType.NearHole, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0))); CinemachineBlendDefinition blendDef = new CinemachineBlendDefinition(CinemachineBlendDefinition.Style.Cut, 1); CameraM.AddBlendSetting(CinemachineBlenderSettings.kBlendFromAnyCameraLabel, CameraM.GetCamera(GolfCameraType.Fly2Land).Name, blendDef); CameraM.SwitchCamera(initType, true); }
/// <summary> /// When getting an event we change our default transition if needed /// </summary> /// <param name="channel"></param> /// <param name="forceMaxPriority"></param> /// <param name="newPriority"></param> /// <param name="forceTransition"></param> /// <param name="blendDefinition"></param> /// <param name="resetValuesAfterTransition"></param> public virtual void OnMMCinemachinePriorityEvent(int channel, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition) { if (forceTransition) { if (_coroutine != null) { StopCoroutine(_coroutine); } else { _initialDefinition = _brain.m_DefaultBlend; } _brain.m_DefaultBlend = blendDefinition; _coroutine = StartCoroutine(ResetBlendDefinition(blendDefinition.m_Time)); } }
/// <summary> /// Triggers a priority change on listening virtual cameras /// </summary> /// <param name="position"></param> /// <param name="feedbacksIntensity"></param> protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { if (Active) { _tempBlend = BlendDefintion; _tempBlend.m_Time = FeedbackDuration; if (Mode == Modes.Event) { MMCinemachinePriorityEvent.Trigger(Channel, ForceMaxPriority, NewPriority, ForceTransition, _tempBlend, ResetValuesAfterTransition, Timing.TimescaleMode); } else { MMCinemachinePriorityEvent.Trigger(Channel, ForceMaxPriority, 0, ForceTransition, _tempBlend, ResetValuesAfterTransition, Timing.TimescaleMode); TargetVirtualCamera.Priority = NewPriority; } } }
/// <summary> /// 重置相机混合 /// </summary> /// <returns>IEnumerator</returns> private IEnumerator ResetCameraBrainBlend() { CinemachineBrain cameraBrain = CameraManager.GetInstance().GetMainCamereComponent().GetCamera().GetComponent <CinemachineBrain>(); CinemachineBlendDefinition oldSetting = cameraBrain.m_DefaultBlend; CinemachineBlendDefinition newSetting = cameraBrain.m_DefaultBlend; newSetting.m_Time = 0.0f; cameraBrain.m_DefaultBlend = newSetting; yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); cameraBrain.m_DefaultBlend = oldSetting; CinemachineVirtualCamera camera1 = GetOrCreateVirtualCamera(VIRTUAL_CAMERA_NAME_1); CinemachineVirtualCamera camera2 = GetOrCreateVirtualCamera(VIRTUAL_CAMERA_NAME_2); camera2.Follow = camera1.Follow = null; camera1.enabled = camera2.enabled = false; }
void SetupBlendList() { mBlendList = new ReorderableList(serializedObject, serializedObject.FindProperty(() => Target.m_CustomBlends), true, true, true, true); // Needed for accessing string names of fields CinemachineBlenderSettings.CustomBlend def = new CinemachineBlenderSettings.CustomBlend(); CinemachineBlendDefinition def2 = new CinemachineBlendDefinition(); float vSpace = 2; float hSpace = 3; float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f; mBlendList.drawHeaderCallback = (Rect rect) => { rect.width -= (EditorGUIUtility.singleLineHeight + 2 * hSpace); rect.width /= 3; rect.x += EditorGUIUtility.singleLineHeight; EditorGUI.LabelField(rect, "From"); rect.x += rect.width + hSpace; EditorGUI.LabelField(rect, "To"); rect.x += rect.width + hSpace; rect.width -= floatFieldWidth + hSpace; EditorGUI.LabelField(rect, "Style"); rect.x += rect.width + hSpace; rect.width = floatFieldWidth; EditorGUI.LabelField(rect, "Time"); }; mBlendList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { SerializedProperty element = mBlendList.serializedProperty.GetArrayElementAtIndex(index); rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight; rect.width -= 2 * hSpace; rect.width /= 3; DrawVcamSelector(rect, element.FindPropertyRelative(() => def.m_From)); rect.x += rect.width + hSpace; DrawVcamSelector(rect, element.FindPropertyRelative(() => def.m_To)); SerializedProperty blendProp = element.FindPropertyRelative(() => def.m_Blend); rect.x += rect.width + hSpace; EditorGUI.PropertyField(rect, blendProp, GUIContent.none); }; mBlendList.onAddCallback = (ReorderableList l) => { var index = l.serializedProperty.arraySize; ++l.serializedProperty.arraySize; SerializedProperty blendProp = l.serializedProperty.GetArrayElementAtIndex( index).FindPropertyRelative(() => def.m_Blend); blendProp.FindPropertyRelative(() => def2.m_Style).enumValueIndex = (int)CinemachineBlendDefinition.Style.EaseInOut; blendProp.FindPropertyRelative(() => def2.m_Time).floatValue = 2f; }; }
void SetupBlendList() { mBlendList = new ReorderableList(serializedObject, serializedObject.FindProperty(() => Target.m_CustomBlends), true, true, true, true); // Needed for accessing string names of fields CinemachineBlenderSettings.CustomBlend def = new CinemachineBlenderSettings.CustomBlend(); CinemachineBlendDefinition def2 = new CinemachineBlendDefinition(); float vSpace = 2; float hSpace = 3; float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f; mBlendList.drawHeaderCallback = (Rect rect) => { rect.width -= (EditorGUIUtility.singleLineHeight + 2 * hSpace); rect.width /= 3; Vector2 pos = rect.position; pos.x += EditorGUIUtility.singleLineHeight; rect.position = pos; EditorGUI.LabelField(rect, "From"); pos.x += rect.width + hSpace; rect.position = pos; EditorGUI.LabelField(rect, "To"); pos.x += rect.width + hSpace; rect.width -= floatFieldWidth + hSpace; rect.position = pos; EditorGUI.LabelField(rect, "Style"); pos.x += rect.width + hSpace; rect.width = floatFieldWidth; rect.position = pos; EditorGUI.LabelField(rect, "Time"); }; mBlendList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { SerializedProperty element = mBlendList.serializedProperty.GetArrayElementAtIndex(index); rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight; Vector2 pos = rect.position; rect.width -= 2 * hSpace; rect.width /= 3; SerializedProperty fromProp = element.FindPropertyRelative(() => def.m_From); int current = GetCameraIndex(fromProp.stringValue); int sel = EditorGUI.Popup(rect, current, mCameraCandidates); if (current != sel) { fromProp.stringValue = mCameraCandidates[sel]; } pos.x += rect.width + hSpace; rect.position = pos; SerializedProperty toProp = element.FindPropertyRelative(() => def.m_To); current = GetCameraIndex(toProp.stringValue); sel = EditorGUI.Popup(rect, current, mCameraCandidates); if (current != sel) { toProp.stringValue = mCameraCandidates[sel]; } SerializedProperty blendProp = element.FindPropertyRelative(() => def.m_Blend); pos.x += rect.width + hSpace; rect.width -= floatFieldWidth; rect.position = pos; SerializedProperty styleProp = blendProp.FindPropertyRelative(() => def2.m_Style); EditorGUI.PropertyField(rect, styleProp, GUIContent.none); if (styleProp.intValue != (int)CinemachineBlendDefinition.Style.Cut) { pos.x += rect.width + hSpace; rect.width = floatFieldWidth; rect.position = pos; SerializedProperty timeProp = blendProp.FindPropertyRelative(() => def2.m_Time); EditorGUI.PropertyField(rect, timeProp, GUIContent.none); } }; mBlendList.onAddCallback = (ReorderableList l) => { var index = l.serializedProperty.arraySize; ++l.serializedProperty.arraySize; SerializedProperty blendProp = l.serializedProperty.GetArrayElementAtIndex( index).FindPropertyRelative(() => def.m_Blend); blendProp.FindPropertyRelative(() => def2.m_Style).enumValueIndex = (int)CinemachineBlendDefinition.Style.EaseInOut; blendProp.FindPropertyRelative(() => def2.m_Time).floatValue = 2f; }; }
/// <summary> /// Passes to the next sequence. Does nothing is no sequence is left /// </summary> public void NextSequence() { if (currentSequence.cutsSlowMoOnEnd) { C_TimeScale.Instance.ForceStopSlowMo(); } GameObject.FindObjectOfType <C_CameraRail>().bFeedbckActivated = currentSequence.bEnableCamFeedback; GameObject.FindObjectOfType <C_CameraRail>().FeedbackTransition(currentSequence.bEnableCamTransition, currentSequence.fSpeedTransition); if (currentSequence.hasEventOnEnd) { switch (currentSequence.seqEvent) { case M_Sequence.SequenceEndEventType.SlowMo: TriggerUtil.TriggerSlowMo(currentSequence.tTimeBeforeEvent, currentSequence.slowMoDuration, currentSequence.slowMoPower); break; case M_Sequence.SequenceEndEventType.Activation: TriggerUtil.TriggerActivation(currentSequence.tTimeBeforeEvent, currentSequence.affected, currentSequence.isActivation); break; case M_Sequence.SequenceEndEventType.Sound: TriggerUtil.TriggerSound(currentSequence.tTimeBeforeEvent, currentSequence.soundPlayed, currentSequence.volume); break; case M_Sequence.SequenceEndEventType.Animation: TriggerUtil.TriggerAnimationsFromTags(currentSequence.tTimeBeforeEvent, currentSequence.tagsAnimated); break; default: break; } } if (sequenceIndex < sequences.Count - 1) { sequenceIndex++; isWaitingTimer = false; currentSequence = sequences[sequenceIndex]; //Debug.Log(currentVirtualCamera); //CREATION DU NOUVEAU BLEND CinemachineBlendDefinition blendDef = new CinemachineBlendDefinition { m_Style = currentSequence.animationStyle, m_Time = currentSequence.fAnimationTime }; //SETUP BLEND CinemachineBlenderSettings.CustomBlend blend = new CinemachineBlenderSettings.CustomBlend { m_From = currentVirtualCamera.Name, m_To = currentSequence.vCamTargetName, m_Blend = blendDef }; blenderSettings.m_CustomBlends[0] = blend; cameraBrain.m_CustomBlends = blenderSettings; //CHANGEMENT DE CAM currentVirtualCamera.Priority = 10; PastCamPos = currentVirtualCamera.transform.position; currentVirtualCamera = GameObject.Find(currentSequence.vCamTargetName).GetComponent <CinemachineVirtualCamera>(); currentVirtualCamera.Priority = 11; NewCamPos = currentVirtualCamera.transform.position; //APPEL DE FONCTIONS DANS LES CHARGEURS C_Charger[] _Chargeurs = GameObject.FindObjectsOfType <C_Charger>(); for (int i = 0; i < _Chargeurs.Length; i++) { _Chargeurs[i].PlayerChangePosition(); } C_Shooter[] _Shooter = GameObject.FindObjectsOfType <C_Shooter>(); for (int i = 0; i < _Shooter.Length; i++) { _Shooter[i].PlayerChangePosition(); } fDelayOnBlendSequence = currentSequence.fAnimationTime + (currentSequence.sequenceType == M_Sequence.SequenceType.Timer ? currentSequence.fTimeSequenceDuration : 0); enemiesKilled = 0; //DECLENCHEMENT DU FEEDBACK DE CAM if (GameObject.FindObjectOfType <C_CameraRail>()) { GameObject.FindObjectOfType <C_CameraRail>().ChangeSpeedMoving(Vector3.Distance(PastCamPos, NewCamPos) / 5 / fDelayOnBlendSequence, 50); } if (currentSequence.sequenceType == M_Sequence.SequenceType.KillEnnemies) { if (currentSequence.bAcceptsBufferKill) { enemiesKilled = bufferedKills; } bufferedKills = 0; } } else { Debug.Log("No sequence left"); readSequences = false; } }
static public void Trigger(int channel, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition) { OnEvent?.Invoke(channel, forceMaxPriority, newPriority, forceTransition, blendDefinition, resetValuesAfterTransition); }
/// <summary> /// When we get an event we change our priorities if needed /// </summary> /// <param name="channel"></param> /// <param name="forceMaxPriority"></param> /// <param name="newPriority"></param> /// <param name="forceTransition"></param> /// <param name="blendDefinition"></param> /// <param name="resetValuesAfterTransition"></param> public virtual void OnMMCinemachinePriorityEvent(int channel, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition) { if (channel == Channel) { _camera.Priority = newPriority; } else { if (forceMaxPriority) { _camera.Priority = 0; } } }