2025-07-10 08:42:30 -04:00
|
|
|
|
using Ichni.RhythmGame.Beatmap;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Ichni.RhythmGame
|
|
|
|
|
|
{
|
|
|
|
|
|
public class CameraZoomEffect : EffectBase
|
|
|
|
|
|
{
|
2026-03-14 03:13:10 -04:00
|
|
|
|
#region [效果参数] Effect Parameters
|
2025-07-10 08:42:30 -04:00
|
|
|
|
public float duration;
|
|
|
|
|
|
public float relativeZoom;
|
|
|
|
|
|
public AnimationCurve zoomCurve;
|
2026-03-14 03:13:10 -04:00
|
|
|
|
|
|
|
|
|
|
private Camera _mainCamera;
|
|
|
|
|
|
private float _startFOV = 60f; // 请填入你项目的默认摄像机广角值
|
|
|
|
|
|
#endregion
|
2025-07-10 08:42:30 -04:00
|
|
|
|
|
2026-03-14 03:13:10 -04:00
|
|
|
|
#region [初始化] Initialization
|
2025-07-10 08:42:30 -04:00
|
|
|
|
public CameraZoomEffect(float duration, float relativeZoom, AnimationCurve zoomCurve)
|
2026-03-14 03:13:10 -04:00
|
|
|
|
: base(duration)
|
2025-07-10 08:42:30 -04:00
|
|
|
|
{
|
|
|
|
|
|
this.duration = duration;
|
|
|
|
|
|
this.relativeZoom = relativeZoom;
|
|
|
|
|
|
this.zoomCurve = zoomCurve;
|
|
|
|
|
|
}
|
2026-03-14 03:13:10 -04:00
|
|
|
|
#endregion
|
2025-07-10 08:42:30 -04:00
|
|
|
|
|
2026-03-14 03:13:10 -04:00
|
|
|
|
#region [效果逻辑覆盖] Effect Pattern Overrides
|
|
|
|
|
|
public override void PreExecute()
|
2025-07-10 08:42:30 -04:00
|
|
|
|
{
|
2026-03-14 03:13:10 -04:00
|
|
|
|
if (_mainCamera == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
_mainCamera = GameManager.Instance.cameraManager.gameCamera.cam;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_startFOV = _mainCamera.fieldOfView; // 记录初始 FOV,结束时恢复
|
2025-07-10 08:42:30 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-14 03:13:10 -04:00
|
|
|
|
public override void Execute()
|
2025-07-10 08:42:30 -04:00
|
|
|
|
{
|
2026-03-14 03:13:10 -04:00
|
|
|
|
if (_mainCamera != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
// relativeZoom > 0 代表拉近视野,FOV 更小
|
|
|
|
|
|
float offset = zoomCurve.Evaluate(effectProgressPercent) * relativeZoom;
|
|
|
|
|
|
_mainCamera.fieldOfView = _startFOV - offset;
|
|
|
|
|
|
}
|
2025-07-10 08:42:30 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-14 03:13:10 -04:00
|
|
|
|
public override void Adjust() { ResetEffect(); }
|
|
|
|
|
|
public override void Recover() { ResetEffect(); }
|
|
|
|
|
|
public override void Disrupt() { ResetEffect(); }
|
2025-07-10 08:42:30 -04:00
|
|
|
|
|
2026-03-14 03:13:10 -04:00
|
|
|
|
private void ResetEffect()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_mainCamera != null) _mainCamera.fieldOfView = _startFOV;
|
2025-07-10 08:42:30 -04:00
|
|
|
|
}
|
2026-03-14 03:13:10 -04:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
2025-07-10 08:42:30 -04:00
|
|
|
|
}
|
2026-03-14 03:13:10 -04:00
|
|
|
|
|
|
|
|
|
|
}
|