using UnityEngine;
using UnityEngine.UI;
using IndianOceanAssets.Engine2_5D;
namespace GameFramework
{
///
/// 受击泛红特效 —— 玩家受伤时屏幕四周闪烁红色暗角。
///
/// 挂载到场景中任意物体上(或由 GameHUD 自动创建)。
/// 运行时自动创建全屏暗角遮罩,监听 HealthSystem.onPlayerDamaged 事件。
///
public class DamageFlashOverlay : MonoBehaviour
{
[Header("特效参数")]
[Tooltip("受击时暗角最大透明度(0~1)")]
[SerializeField] private float flashAlpha = 0.8f;
[Tooltip("闪烁淡出时间(秒)")]
[SerializeField] private float fadeDuration = 0.4f;
[Tooltip("暗角内圈半径(0~1,0=全屏幕红色,1=只有最边缘)")]
[SerializeField] private float innerRadius = 0.8f;
private Canvas _canvas;
private Image _overlayImage;
private float _currentAlpha;
private bool _isFlashing;
private void Start()
{
CreateOverlay();
HealthSystem.onPlayerDamaged += OnPlayerDamaged;
}
private void OnDestroy()
{
HealthSystem.onPlayerDamaged -= OnPlayerDamaged;
}
private void Update()
{
if (!_isFlashing) return;
// 淡出
_currentAlpha -= Time.unscaledDeltaTime / fadeDuration;
if (_currentAlpha <= 0f)
{
_currentAlpha = 0f;
_isFlashing = false;
_overlayImage.gameObject.SetActive(false);
}
_overlayImage.color = new Color(1f, 0f, 0f, _currentAlpha);
}
private void OnPlayerDamaged()
{
// 重置闪烁
_currentAlpha = flashAlpha;
_isFlashing = true;
_overlayImage.gameObject.SetActive(true);
_overlayImage.color = new Color(1f, 0f, 0f, _currentAlpha);
}
///
/// 创建全屏暗角遮罩(运行时生成暗角纹理)。
///
private void CreateOverlay()
{
// 创建 Canvas
var canvasObj = new GameObject("DamageFlashCanvas");
_canvas = canvasObj.AddComponent