TH1/Unity/Assets/Scripts/Effect/SpriteEffectController.cs
2025-07-17 18:26:28 +08:00

64 lines
1.8 KiB
C#

using UnityEngine;
[RequireComponent(typeof(SpriteRenderer))]
public class SpriteEffectController : MonoBehaviour
{
[Header("Materials")]
public Material outlineMaterial;
public Material grayScaleMaterial;
[Header("Outline Settings")]
[ColorUsage(true)]
public Color outlineColor = Color.white;
[Range(0, 0.5f)]
public float outlineWidth = 0.5f;
[Header("Gray Settings")]
[Range(0, 1)]
public float grayIntensity = 0.8f;
private SpriteRenderer spriteRenderer;
private Material originalMaterial;
private MaterialPropertyBlock propBlock;
private void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer>();
originalMaterial = new Material(spriteRenderer.sharedMaterial); //spriteRenderer.sharedMaterial;
propBlock = new MaterialPropertyBlock();
}
public void ApplyOutlineEffect()
{
spriteRenderer.GetPropertyBlock(propBlock);
propBlock.SetColor("_OutlineColor", outlineColor);
propBlock.SetFloat("_OutlineWidth", outlineWidth);
spriteRenderer.SetPropertyBlock(propBlock);
spriteRenderer.material = outlineMaterial;
gameObject.SetActive(false);
gameObject.SetActive(true);
}
public void ApplyGrayEffect()
{
spriteRenderer.GetPropertyBlock(propBlock);
propBlock.SetFloat("_GrayAmount", grayIntensity);
spriteRenderer.SetPropertyBlock(propBlock);
spriteRenderer.material = grayScaleMaterial;
gameObject.SetActive(false);
gameObject.SetActive(true);
}
public void ResetToOriginal()
{
spriteRenderer.GetPropertyBlock(propBlock);
propBlock.Clear();
spriteRenderer.SetPropertyBlock(propBlock);
spriteRenderer.material = originalMaterial;
gameObject.SetActive(false);
gameObject.SetActive(true);
}
}