Files
aibis-dream/Assets/Scripts/FixSystem/Effect/ScreenEffectManager.cs
T

73 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using Yarn.Unity;
public class ScreenEffectManager : MonoBehaviour
{
public static ScreenEffectManager Instance { get; private set; }
public Image blackoutPanel; // 黑屏面板
public Image redFlashPanel; // 红色闪烁面板
public float shakeDuration = 1.0f; // 震屏持续时间
public float shakeIntensity = 0.1f; // 震屏强度
private Vector3 originalCameraPosition;
private void Awake()
{
// 确保单例模式
if (Instance != null && Instance != this)
{
Destroy(gameObject);
}
else
{
Instance = this;
DontDestroyOnLoad(gameObject); // 可选:保持在场景加载之间
}
}
private void Start()
{
// 保存初始相机位置
originalCameraPosition = Camera.main.transform.localPosition;
}
// 震屏效果
[YarnCommand("shakeScreen")]
public void ShakeScreen()
{
Camera.main.transform.DOPunchPosition(Vector3.one * shakeIntensity, shakeDuration, 10, 1);
}
// 黑屏淡入淡出效果
[YarnCommand("fadeIn")]
public void FadeBlackout(bool enable, float duration)
{
if (enable)
{
blackoutPanel.gameObject.SetActive(true);
blackoutPanel.DOFade(1, duration).OnComplete(() => blackoutPanel.gameObject.SetActive(true));
}
else
{
blackoutPanel.DOFade(0, duration).OnComplete(() => blackoutPanel.gameObject.SetActive(false));
}
}
// 红色闪烁效果
[YarnCommand("flashRed")]
public void FlashRed(float duration)
{
redFlashPanel.gameObject.SetActive(true);
redFlashPanel.DOFade(1, duration / 2).OnComplete(() =>
{
redFlashPanel.DOFade(0, duration / 2).OnComplete(() =>
{
redFlashPanel.gameObject.SetActive(false);
});
});
}
}