using UnityEngine; public abstract class LightRays2DAbstract : MonoBehaviour { private Material mat; public Color color1 = Color.white; private Color _color1; public Color color2 = new Color(0f, 0.46f, 1f, 0f); private Color _color2; [Range(0f, 5f)] public float speed = 0.5f; private float _speed; [Range(1f, 30f)] public float size = 15f; private float _size; [Range(-1f, 1f)] public float skew = 0.5f; private float _skew; [Range(0f, 5f)] public float shear = 1f; private float _shear; [Range(0f, 1f)] public float fade = 1f; private float _fade; [Range(0f, 50f)] public float contrast = 1f; private float _contrast; private void Start() { InitializeReferences(); _color1 = (color1 = mat.GetColor("_Color1")); _color2 = (color2 = mat.GetColor("_Color2")); _speed = (speed = mat.GetFloat("_Speed")); _size = (size = mat.GetFloat("_Size")); _skew = (skew = mat.GetFloat("_Skew")); _shear = (shear = mat.GetFloat("_Shear")); _fade = (fade = mat.GetFloat("_Fade")); _contrast = (contrast = mat.GetFloat("_Contrast")); } protected virtual void Update() { GetReferences(); if (AnythingChanged()) { mat.SetColor("_Color1", color1); mat.SetColor("_Color2", color2); mat.SetFloat("_Speed", _speed); mat.SetFloat("_Size", _size); mat.SetFloat("_Skew", _skew); mat.SetFloat("_Shear", _shear); mat.SetFloat("_Fade", _fade); mat.SetFloat("_Contrast", _contrast); } } private void InitializeReferences() { if (mat == null) { GetReferences(); mat = GetMaterial(); } } protected abstract void GetReferences(); protected abstract Material GetMaterial(); protected abstract void ApplyMaterial(Material material); private bool AnythingChanged() { bool result = false; if (_color1 != color1) { _color1 = color1; result = true; } if (_color2 != color2) { _color2 = color2; result = true; } if (_speed != speed) { _speed = speed; result = true; } if (_size != size) { _size = size; result = true; } if (_skew != skew) { _skew = skew; result = true; } if (_shear != shear) { _shear = shear; result = true; } if (_fade != fade) { _fade = fade; result = true; } if (_contrast != contrast) { _contrast = contrast; result = true; } return result; } }