using Cinemachine; using Framework.Utils; using Framework.Utils.SingletonTemplate; using UnityEngine; using CameraType = Framework.Utils.CameraType; namespace System { public class CameraImpulseUtils : MgrBase { protected override void OnCreateMge() { var camera = CameraGroup.Instance.GetCamera(CameraType.Base); // if (camera.GetComponent() == null) // { // this._cineMachineNormalImpulseSource = camera.gameObject.AddComponent(); // } // else // { // this._cineMachineNormalImpulseSource = camera.GetComponent(); // } this._cineMachineLegacyImpulseSource = camera.transform.Find("ImpulsLegacy").GetComponent(); this._cineMachineNormalImpulseSource = camera.transform.Find("ImpulsNormal").GetComponent(); } private CinemachineImpulseSource _cineMachineLegacyImpulseSource; private CinemachineImpulseSource _cineMachineNormalImpulseSource; /// /// 设置默认震动方向 /// /// public void SetDefaultImpulseVector(Vector3 vector) { this._cineMachineNormalImpulseSource.m_DefaultVelocity = vector; } /// /// 简易自定义震动 /// /// /// /// /// /// public void SampleImpulseCamera(float time, Vector3 vector, float scale, CinemachineImpulseDefinition.ImpulseTypes impulseTypes, CinemachineImpulseDefinition.ImpulseShapes impulseShapes) { this._cineMachineNormalImpulseSource.m_ImpulseDefinition.m_ImpulseDuration = time; this._cineMachineNormalImpulseSource.m_ImpulseDefinition.m_ImpulseType = impulseTypes; this._cineMachineNormalImpulseSource.m_ImpulseDefinition.m_ImpulseShape = impulseShapes; this._cineMachineNormalImpulseSource.GenerateImpulse(vector.normalized * scale); } /// /// 持续震动 /// /// /// public void UniformImpulseCamera(float time, float scale = 1, float inTime = 0, float outTime = 0 ) { if (time <= 0 || scale == 0) { CinemachineImpulseManager.Instance.Clear(); return; } this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_ImpulseDuration = time; // this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_ImpulseType = CinemachineImpulseDefinition.ImpulseTypes.Legacy; this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_DissipationMode = CinemachineImpulseManager.ImpulseEvent.DissipationMode.SoftDecay; this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_TimeEnvelope = new CinemachineImpulseManager.EnvelopeDefinition() { m_AttackTime = inTime, m_DecayTime = outTime, m_SustainTime = time, }; this._cineMachineLegacyImpulseSource.GenerateImpulse(scale); } /// /// 爆炸性震动 /// /// /// public void ExplosionImpulseCamera(float time, float scale = 1, float inTime = 0, float outTime = 0 ) { this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_ImpulseDuration = time; // this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_ImpulseType = CinemachineImpulseDefinition.ImpulseTypes.Legacy; this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_DissipationMode = CinemachineImpulseManager.ImpulseEvent.DissipationMode.ExponentialDecay; // this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_RawSignal = ; this._cineMachineLegacyImpulseSource.m_ImpulseDefinition.m_TimeEnvelope = new CinemachineImpulseManager.EnvelopeDefinition() { m_AttackTime = inTime, m_DecayTime = outTime, m_SustainTime = time, }; this._cineMachineLegacyImpulseSource.GenerateImpulse(scale); } } }