Files
aibis-dream/Assets/Scripts/MiniGame/Peipei/Eye/EyeTarget.cs
T
2025-03-21 21:52:38 +08:00

149 lines
4.6 KiB
C#

using UnityEngine;
using DG.Tweening;
using AibisDream.Utility;
using AibisDream.Kit;
public class EyeTarget : MonoBehaviour
{
public Transform targetTransform; // EyeTarget的位置
[SerializeField] private float burnRadiusMin = 0f; // 对应_BurnRadius的最小值
[SerializeField] private float burnRadiusMax = 1f; // 对应_BurnRadius的最大值
private Material forwardMaterial;
[SerializeField] private SpriteRenderer backSpriteRenderer;
[SerializeField] private SpriteRenderer wrongColorSpriteRenderer;
[SerializeField] private SpriteRenderer imageSpriteRender;
private Material backMaterial;
private Material wrongColorMaterial;
public Color _color;
private void Awake()
{
// 获取此对象的材质
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
forwardMaterial = spriteRenderer.material;
forwardMaterial.SetFloat("_SourceGlowDissolveFade", burnRadiusMin);
backMaterial = backSpriteRenderer.material;
wrongColorMaterial = wrongColorSpriteRenderer.material;
;
}
public void Init()
{
SetToMinBurnRadius();
SetToMaxBlur(false);
SetToNoWrongColor();
SetNoImage();
}
public void ImageIn(float duration)
{
imageSpriteRender.DOFade(1, duration);
}
public void ImageOut(float duration)
{
imageSpriteRender.DOFade(0, duration);
}
public void SetNoImage()
{
imageSpriteRender.SetAlpha(0);
}
public void SetToMinBurnRadius()
{
forwardMaterial.SetFloat("_SourceGlowDissolveFade", burnRadiusMin);
}
public void SetToMaxBurnRadius()
{
forwardMaterial.SetFloat("_SourceGlowDissolveFade", burnRadiusMax);
}
public void SetToMaxBlur(bool isForwardMaterial = true)
{
Material targetMaterial = isForwardMaterial ? forwardMaterial : backMaterial;
targetMaterial.SetFloat("_GaussianBlurFade", 1f);
}
public void SetToMinBlur(bool isForwardMaterial = true)
{
Material targetMaterial = isForwardMaterial ? forwardMaterial : backMaterial;
targetMaterial.SetFloat("_GaussianBlurFade", 0f);
}
public void SetToNoWrongColor()
{
wrongColorMaterial.SetFloat("_Alpha", 0f);
}
public void SetToWrongColor()
{
wrongColorMaterial.SetFloat("_Alpha", 1f);
}
public void FadeOut(float duration)
{
// 使用DoTween库来改变_BurnRadius,使目标褪色
forwardMaterial.DOFloat(burnRadiusMin, "_SourceGlowDissolveFade", duration);
forwardMaterial.DOFloat(1f, "_GaussianBlurFade", duration).SetEase(Ease.InSine);
forwardMaterial.DOFloat(1f, "_UVDistortFade", duration / 2).SetEase(Ease.InSine).SetLoops(2, LoopType.Yoyo);
;
}
public void ColorIn(float duration)
{
forwardMaterial.DOFloat(burnRadiusMax, "_SourceGlowDissolveFade", duration).SetEase(Ease.InOutSine);
forwardMaterial.DOFloat(0f, "_GaussianBlurFade", duration).SetEase(Ease.InOutSine);
forwardMaterial.DOFloat(1f, "_UVDistortFade", duration / 2).SetEase(Ease.InOutSine).SetLoops(2, LoopType.Yoyo);
;
}
public void WrongColorIn(float duration)
{
wrongColorMaterial.DOFloat(1f, "_Alpha", duration).SetEase(Ease.InOutSine);
}
public void WrongColorOut(float duration)
{
wrongColorMaterial.DOFloat(0f, "_Alpha", duration).SetEase(Ease.InOutSine);
}
public void BlurIn(float duration, bool isForwardMaterial = true)
{
// AudioManager.PlayLoopAudio("visualturn");
AudioManager.Instance.PlaySfx("event:/ActionFB/visualturn");
Material targetMaterial = isForwardMaterial ? forwardMaterial : backMaterial;
targetMaterial.DOFloat(1f, "_GaussianBlurFade", duration).SetEase(Ease.InOutSine)
.OnComplete(() => { AudioManager.Instance.StopSfx("event:/ActionFB/visualturn"); });
}
public void BlurOut(float duration, bool isForwardMaterial = true)
{
// AudioManager.PlayLoopAudio("visualturn");
AudioManager.Instance.PlaySfx("event:/ActionFB/visualturn");
Material targetMaterial = isForwardMaterial ? forwardMaterial : backMaterial;
targetMaterial.DOFloat(0f, "_GaussianBlurFade", duration).SetEase(Ease.InOutSine)
.OnComplete(() => { AudioManager.Instance.StopSfx("event:/ActionFB/visualturn"); });
}
public void ColorBack()
{
SetToMaxBurnRadius();
SetToNoWrongColor();
SetToMinBlur();
}
public void ColorLost()
{
SetToMinBurnRadius();
//SetToNoWrongColor();
SetToMaxBlur();
}
}