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(); 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); } }