Files
aibis-dream/Assets/Scripts/FixSystem/Effect/ScreenEffectManager.cs
T
bottlefish b330be6118 修复脚本错误,将做好的核心表现加入
修改了更改饱和度的方法并加入脚本
修正了进入记忆视图时候的错误
增加了头部移动时线和插头的跟随
降低了记忆搜寻的时间
去掉了诊所场景固定的人物
2024-09-03 19:51:33 +08:00

113 lines
3.3 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using Yarn.Unity;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using System.Collections;
public class ScreenEffectManager : MonoBehaviour
{
public static ScreenEffectManager Instance { get; private set; }
public Image blackoutPanel; // 黑屏面板
public Image redFlashPanel; // 红色闪烁面板
private float shakeDuration = 0.5f; // 震屏持续时间
private float shakeIntensity = 0.04f; // 震屏强度
public Volume saturation;
private ColorAdjustments colorAdjustments;
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;
// 获取 ColorAdjustments 设置
if (saturation.profile.TryGet(out colorAdjustments))
{
Debug.Log("ColorAdjustments is available.");
}
else
{
Debug.LogError("ColorAdjustments settings not found in PostProcessProfile.");
}
}
// 震屏效果
[YarnCommand("shakeScreen")]
public IEnumerator ShakeScreen()
{
yield return Camera.main.transform.DOPunchPosition(new Vector3(1, 0, 0) * shakeIntensity, shakeDuration, 8, 1f).WaitForCompletion();
}
// 黑屏淡入淡出效果
[YarnCommand("fadeIn")]
public IEnumerator FadeIn(float waitTime, float duration)
{
blackoutPanel.gameObject.SetActive(true);
Sequence fadeInSequence = DOTween.Sequence();
fadeInSequence.Append(blackoutPanel.DOFade(1f, duration));
fadeInSequence.AppendInterval(waitTime);
fadeInSequence.Append(blackoutPanel.DOFade(0f, duration).OnComplete(() =>
{
blackoutPanel.gameObject.SetActive(false);
}));
yield return fadeInSequence.WaitForCompletion();
}
// 红色闪烁效果
[YarnCommand("flashRed")]
public IEnumerator FlashRed(float duration)
{
redFlashPanel.gameObject.SetActive(true);
yield return redFlashPanel.DOFade(1, duration / 2).WaitForCompletion();
yield return redFlashPanel.DOFade(0, duration / 2).OnComplete(() =>
{
redFlashPanel.gameObject.SetActive(false);
}).WaitForCompletion();
}
// 动态调整饱和度
public Tween TweenSaturation(float targetSaturation, float duration)
{
if (colorAdjustments != null)
{
// 使用 DOTween 创建一个饱和度过渡动画
Tween tween = DOTween.To(
() => colorAdjustments.saturation.value, // 获取当前饱和度值
x => colorAdjustments.saturation.value = x, // 设置新的饱和度值
targetSaturation, // 目标饱和度值
duration // 过渡持续时间
);
return tween; // 返回 Tween 对象
}
else
{
Debug.LogError("ColorAdjustments settings not found.");
return null; // 如果找不到设置,返回 null
}
}
}