149 lines
4.6 KiB
C#
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();
|
|
}
|
|
} |