Ver.0.3.0.33
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using DG.Tweening;
|
||||
using UnityEngine.Rendering;
|
||||
using System.Collections;
|
||||
using AibisDream.Framework;
|
||||
using UnityEngine.EventSystems;
|
||||
using AibisDream.FixSystem;
|
||||
|
||||
namespace AibisDream
|
||||
{
|
||||
public class SpriteFlashSystem : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private SpriteRenderer targetSpriteRenderer;
|
||||
[SerializeField] private SpriteRenderer backupSpriteRenderer;
|
||||
// [SerializeField] private SpriteRenderer crossFadeRenderer1;
|
||||
// [SerializeField] private SpriteRenderer crossFadeRenderer2;
|
||||
// [SerializeField] private float fadeDuration = 0.5f;
|
||||
// [SerializeField] private float crossFadeDuration = 2f;
|
||||
[SerializeField] private UnityEngine.Rendering.Volume volume1;
|
||||
|
||||
private bool isFading = false;
|
||||
private bool isEndingMode = false;
|
||||
private DG.Tweening.Sequence currentSequence;
|
||||
private int currentEndingIndex = 0;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// 确保SpriteRenderer初始状态正确
|
||||
if (targetSpriteRenderer != null)
|
||||
{
|
||||
targetSpriteRenderer.color = new Color(1f, 1f, 1f, 0f);
|
||||
targetSpriteRenderer.enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("未设置目标SpriteRenderer!");
|
||||
}
|
||||
|
||||
if (backupSpriteRenderer != null)
|
||||
{
|
||||
backupSpriteRenderer.color = new Color(1f, 1f, 1f, 0f);
|
||||
backupSpriteRenderer.enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("未设置备用SpriteRenderer!");
|
||||
}
|
||||
|
||||
// if (crossFadeRenderer1 != null)
|
||||
// {
|
||||
// crossFadeRenderer1.color = new Color(1f, 1f, 1f, 0f);
|
||||
// crossFadeRenderer1.enabled = false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Debug.LogError("未设置交叉淡入淡出SpriteRenderer1!");
|
||||
// }
|
||||
|
||||
// if (crossFadeRenderer2 != null)
|
||||
// {
|
||||
// crossFadeRenderer2.color = new Color(1f, 1f, 1f, 0f);
|
||||
// crossFadeRenderer2.enabled = false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Debug.LogError("未设置交叉淡入淡出SpriteRenderer2!");
|
||||
// }
|
||||
}
|
||||
|
||||
public IEnumerator TriggerFlash(string imagePath, float fadeDuration = 0.2f)
|
||||
{
|
||||
if (!isFading)
|
||||
{
|
||||
string fullPath = $"Assets/Resources/Art/CG/{imagePath}";
|
||||
Sprite flashSprite = Resources.Load<Sprite>($"Art/CG/{imagePath}");
|
||||
if (flashSprite != null)
|
||||
{
|
||||
yield return StartFlash(flashSprite, fadeDuration);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"无法加载闪回图片: {fullPath}");
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"无法开始闪烁:isFading={isFading}");
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerator TriggerEnding(string imagePath, float fadeDuration = 2f)
|
||||
{
|
||||
if (!isFading)
|
||||
{
|
||||
string fullPath = $"Assets/Resources/Art/CG/{imagePath}";
|
||||
Sprite endingSprite = Resources.Load<Sprite>($"Art/CG/{imagePath}");
|
||||
if (endingSprite != null)
|
||||
{
|
||||
if (currentEndingIndex == 0)
|
||||
{
|
||||
yield return StartEndingFadeIn(endingSprite, 0.01f);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return StartEndingFadeIn(endingSprite, fadeDuration);
|
||||
}
|
||||
currentEndingIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"无法加载结局图片: {fullPath}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"无法开始闪烁:isFading={isFading}");
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator StartFlash(Sprite flashSprite, float fadeDuration = 0.5f)
|
||||
{
|
||||
targetSpriteRenderer.enabled = true;
|
||||
backupSpriteRenderer.enabled = true;
|
||||
Debug.Log("开始Sprite闪烁");
|
||||
isFading = true;
|
||||
targetSpriteRenderer.sprite = flashSprite;
|
||||
targetSpriteRenderer.color = new Color(1f, 1f, 1f, 0f);
|
||||
StartCoroutine(CameraKit.Instance.ShakeCamera(fadeDuration, 0.25f, 60));
|
||||
|
||||
// 创建新的序列
|
||||
currentSequence?.Kill();
|
||||
currentSequence = DOTween.Sequence();
|
||||
|
||||
// 添加淡入效果
|
||||
currentSequence.Append(targetSpriteRenderer.DOFade(1f, fadeDuration).SetEase(Ease.InOutSine));
|
||||
if (volume1 != null)
|
||||
currentSequence.Join(DOTween.To(() => volume1.weight, x => volume1.weight = x, 1f, fadeDuration).SetEase(Ease.InOutSine));
|
||||
|
||||
// 添加淡出效果
|
||||
currentSequence.Append(targetSpriteRenderer.DOFade(0f, fadeDuration).SetEase(Ease.InOutSine));
|
||||
if (volume1 != null)
|
||||
currentSequence.Join(DOTween.To(() => volume1.weight, x => volume1.weight = x, 0f, fadeDuration).SetEase(Ease.InOutSine));
|
||||
|
||||
// 等待序列完成
|
||||
yield return currentSequence.WaitForCompletion();
|
||||
|
||||
// 完成后重置状态
|
||||
Debug.Log("闪烁效果完成");
|
||||
isFading = false;
|
||||
currentSequence = null;
|
||||
targetSpriteRenderer.enabled = false;
|
||||
backupSpriteRenderer.enabled = false;
|
||||
DialogController.Instance.StartDialogNode("闪回完成");
|
||||
}
|
||||
|
||||
private IEnumerator StartEndingFadeIn(Sprite endingSprite, float fadeDuration = 2f)
|
||||
{
|
||||
isFading = true;
|
||||
targetSpriteRenderer.sprite = endingSprite;
|
||||
targetSpriteRenderer.color = new Color(1f, 1f, 1f, 0f);
|
||||
|
||||
// 创建新的序列
|
||||
currentSequence?.Kill();
|
||||
currentSequence = DOTween.Sequence();
|
||||
|
||||
// 添加淡入效果
|
||||
currentSequence.Append(targetSpriteRenderer.DOFade(1f, fadeDuration).SetEase(Ease.InOutSine));
|
||||
// if (volume1 != null)
|
||||
// currentSequence.Join(DOTween.To(() => volume1.weight, x => volume1.weight = x, 1f, fadeDuration).SetEase(Ease.InOutSine));
|
||||
|
||||
// 等待序列完成
|
||||
yield return currentSequence.WaitForCompletion();
|
||||
|
||||
// 完成后重置状态
|
||||
isFading = false;
|
||||
currentSequence = null;
|
||||
}
|
||||
|
||||
// private IEnumerator StartEndingCrossFade(Sprite endingSprite, float crossFadeDuration = 2f)
|
||||
// {
|
||||
// isFading = true;
|
||||
|
||||
// // 启用交叉淡入淡出渲染器
|
||||
// crossFadeRenderer1.enabled = true;
|
||||
// crossFadeRenderer2.enabled = true;
|
||||
|
||||
// // 设置第一个渲染器的sprite为当前显示的图片
|
||||
// crossFadeRenderer1.sprite = targetSpriteRenderer.sprite;
|
||||
// crossFadeRenderer1.color = new Color(1f, 1f, 1f, 1f);
|
||||
|
||||
// // 设置第二个渲染器的sprite为新图片
|
||||
// crossFadeRenderer2.sprite = endingSprite;
|
||||
// crossFadeRenderer2.color = new Color(1f, 1f, 1f, 0f);
|
||||
|
||||
// // 创建新的序列
|
||||
// currentSequence?.Kill();
|
||||
// currentSequence = DOTween.Sequence();
|
||||
|
||||
// // 第一个渲染器淡出,同时第二个渲染器淡入
|
||||
// currentSequence.Join(crossFadeRenderer1.DOFade(0f, crossFadeDuration).SetEase(Ease.InOutSine));
|
||||
// currentSequence.Join(crossFadeRenderer2.DOFade(1f, crossFadeDuration).SetEase(Ease.InOutSine));
|
||||
|
||||
// // 等待序列完成
|
||||
// yield return currentSequence.WaitForCompletion();
|
||||
|
||||
// // 更新目标渲染器的sprite
|
||||
// targetSpriteRenderer.sprite = endingSprite;
|
||||
// targetSpriteRenderer.color = new Color(1f, 1f, 1f, 1f);
|
||||
|
||||
// // 禁用交叉淡入淡出渲染器
|
||||
// crossFadeRenderer1.enabled = false;
|
||||
// crossFadeRenderer2.enabled = false;
|
||||
|
||||
// isFading = false;
|
||||
// currentSequence = null;
|
||||
// }
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
currentSequence?.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user