64 lines
1.8 KiB
C#
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);
|
|
}
|
|
} |