GroupOpacityController.cs (using Update)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using UnityEngine; [ExecuteAlways] public class GroupOpacityController : MonoBehaviour { [Range(0f, 1f)] public float opacity = 1f; Renderer[] renderers; SpriteRenderer[] spriteRenderers; float _previousOpacity; void Start() { renderers = GetComponentsInChildren<Renderer>(); spriteRenderers = GetComponentsInChildren<SpriteRenderer>(); SetOpacity(opacity); } void Update() { if (opacity != _previousOpacity) { SetOpacity(opacity); _previousOpacity = opacity; } } void SetOpacity( float opacity) { if (renderers != null ) { foreach (Renderer renderer in renderers) { for ( int i = 0; i < renderer.sharedMaterials.Length; i++) { Color color= renderer.sharedMaterials[i].color; color.a = opacity; MaterialPropertyBlock matBlock = new MaterialPropertyBlock(); matBlock.SetColor( "_Color" , color); renderer.SetPropertyBlock(matBlock, i); } } } if (spriteRenderers != null ) { foreach (SpriteRenderer spriteRenderer in spriteRenderers) { Color color = spriteRenderer.color; color.a = opacity; spriteRenderer.color = color; } } } } |
GroupOpacityController.cs (using Property)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | using UnityEngine; [ExecuteAlways] public class GroupOpacityController : MonoBehaviour { [SerializeField, Range(0f, 1f)] float _opacity = 1f; public float Opacity { get { return _opacity; } set { _opacity = Mathf.Clamp01(value); SetOpacity(_opacity); } } Renderer[] renderers; SpriteRenderer[] spriteRenderers; #if UNITY_EDITOR void OnValidate() { SetOpacity(_opacity); } #endif void Start() { renderers = GetComponentsInChildren<Renderer>(); spriteRenderers = GetComponentsInChildren<SpriteRenderer>(); SetOpacity(_opacity); } void SetOpacity( float opacity) { if (renderers != null ) { foreach (Renderer renderer in renderers) { for ( int i = 0; i < renderer.sharedMaterials.Length; i++) { Color color= renderer.sharedMaterials[i].color; color.a = opacity; MaterialPropertyBlock matBlock = new MaterialPropertyBlock(); matBlock.SetColor( "_Color" , color); renderer.SetPropertyBlock(matBlock, i); } } } if (spriteRenderers != null ) { foreach (SpriteRenderer spriteRenderer in spriteRenderers) { Color color = spriteRenderer.color; color.a = opacity; spriteRenderer.color = color; } } } } |