You've already forked taptap2024_GJ_chidouren
98 lines
4.6 KiB
C#
98 lines
4.6 KiB
C#
using Cinemachine;
|
|
using Framework.Utils;
|
|
using Framework.Utils.SingletonTemplate;
|
|
using UnityEngine;
|
|
using CameraType = Framework.Utils.CameraType;
|
|
|
|
namespace System
|
|
{
|
|
public class CameraImpulseUtils : MgrBase<CameraImpulseUtils>
|
|
{
|
|
protected override void OnCreateMge()
|
|
{
|
|
var camera = CameraGroup.Instance.GetCamera(CameraType.Base);
|
|
// if (camera.GetComponent<CinemachineImpulseSource>() == null)
|
|
// {
|
|
// this._cineMachineNormalImpulseSource = camera.gameObject.AddComponent<CinemachineImpulseSource>();
|
|
// }
|
|
// else
|
|
// {
|
|
// this._cineMachineNormalImpulseSource = camera.GetComponent<CinemachineImpulseSource>();
|
|
// }
|
|
this._cineMachineLegacyImpulseSource = camera.transform.Find("ImpulsLegacy").GetComponent<CinemachineImpulseSource>();
|
|
this._cineMachineNormalImpulseSource = camera.transform.Find("ImpulsNormal").GetComponent<CinemachineImpulseSource>();
|
|
}
|
|
|
|
private CinemachineImpulseSource _cineMachineLegacyImpulseSource;
|
|
private CinemachineImpulseSource _cineMachineNormalImpulseSource;
|
|
|
|
/// <summary>
|
|
/// 设置默认震动方向
|
|
/// </summary>
|
|
/// <param name="vector"></param>
|
|
public void SetDefaultImpulseVector(Vector3 vector)
|
|
{
|
|
this._cineMachineNormalImpulseSource.m_DefaultVelocity = vector;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 简易自定义震动
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <param name="vector"></param>
|
|
/// <param name="scale"></param>
|
|
/// <param name="impulseTypes"></param>
|
|
/// <param name="impulseShapes"></param>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 持续震动
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <param name="scale"></param>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 爆炸性震动
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <param name="scale"></param>
|
|
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);
|
|
}
|
|
}
|
|
} |