void RemoveCustomTextureOverrides()
        {
            if (skeletonGraphic == null)
            {
                Debug.LogError("skeletonGraphic == null");
                return;
            }

            for (int i = 0; i < customTextureOverrides.Count; i++)
            {
                AtlasTextureOverride atlasTextureOverride = customTextureOverrides[i];
                Texture currentTexture;

                if (!skeletonGraphic.CustomTextureOverride.TryGetValue(atlasTextureOverride.originalTexture, out currentTexture))
                {
                    continue;
                }

                // Do not revert the material if it was changed by something else
                if (currentTexture != atlasTextureOverride.replacementTexture)
                {
                    continue;
                }

                skeletonGraphic.CustomTextureOverride.Remove(atlasTextureOverride.originalTexture);
            }
        }
        void Reset()
        {
            skeletonGraphic = GetComponent <SkeletonGraphic>();

            // Populate material list
            if (skeletonGraphic != null && skeletonGraphic.skeletonDataAsset != null)
            {
                var atlasAssets = skeletonGraphic.skeletonDataAsset.atlasAssets;

                var initialAtlasMaterialOverrides = new List <AtlasMaterialOverride>();
                foreach (AtlasAssetBase atlasAsset in atlasAssets)
                {
                    foreach (Material atlasMaterial in atlasAsset.Materials)
                    {
                        var atlasMaterialOverride = new AtlasMaterialOverride {
                            overrideEnabled = false,
                            originalTexture = atlasMaterial.mainTexture
                        };

                        initialAtlasMaterialOverrides.Add(atlasMaterialOverride);
                    }
                }
                customMaterialOverrides = initialAtlasMaterialOverrides;
            }

            // Populate texture list
            if (skeletonGraphic != null && skeletonGraphic.skeletonDataAsset != null)
            {
                var atlasAssets = skeletonGraphic.skeletonDataAsset.atlasAssets;

                var initialAtlasTextureOverrides = new List <AtlasTextureOverride>();
                foreach (AtlasAssetBase atlasAsset in atlasAssets)
                {
                    foreach (Material atlasMaterial in atlasAsset.Materials)
                    {
                        var atlasTextureOverride = new AtlasTextureOverride {
                            overrideEnabled = false,
                            originalTexture = atlasMaterial.mainTexture
                        };

                        initialAtlasTextureOverrides.Add(atlasTextureOverride);
                    }
                }
                customTextureOverrides = initialAtlasTextureOverrides;
            }
        }
        void SetCustomTextureOverrides()
        {
            if (skeletonGraphic == null)
            {
                Debug.LogError("skeletonGraphic == null");
                return;
            }

            for (int i = 0; i < customTextureOverrides.Count; i++)
            {
                AtlasTextureOverride atlasTextureOverride = customTextureOverrides[i];
                if (atlasTextureOverride.overrideEnabled)
                {
                    skeletonGraphic.CustomTextureOverride[atlasTextureOverride.originalTexture] = atlasTextureOverride.replacementTexture;
                }
            }
        }