private void SelectLayer(SortingLayer selectedLayer) { if (!highlightSelectedLayer) return; // Loop through all SpriteRenderers and set opacity of those who are on an unselected layer foreach(SpriteRenderer r in MapRootObject.GetComponentsInChildren<SpriteRenderer>()) { int id = r.GetInstanceID(); // Check if opacity needs to be restored to original value if(selectedLayer == SortingLayer.All || r.sortingLayerName == selectedLayer.ToString()) { // Get stored original opacity (if it wasn't stored for the current object, skip it) float originalOpacity = 1; if (originalSpriteOpacities.ContainsKey(id)) originalOpacity = originalSpriteOpacities[id]; else continue; // Only restore value if the opacity matches the constant unselected layer-opacity, otherwise the // user might changed the value beforehand if (r.color.a == UNSELECTED_LAYER_OPACITY) r.color = new Color(r.color.r, r.color.g, r.color.b, originalOpacity); } else if(r.color.a != UNSELECTED_LAYER_OPACITY) { // Current object isn't on a selected layer and isn't already hidden, store original opacity value if (originalSpriteOpacities.ContainsKey(id)) originalSpriteOpacities[id] = r.color.a; else originalSpriteOpacities.Add(id, r.color.a); // Hide it! r.color = new Color(r.color.r, r.color.g, r.color.b, UNSELECTED_LAYER_OPACITY); } } }