public void Start()
    {
        Instance        = this;
        tilemapCollider = GetComponent <CompositeCollider2D>();

        shadowCasterContainer = new GameObject("Shadow Casters");
        Vector3 lP = shadowCasterContainer.transform.localPosition;

        shadowCasterContainer.transform.parent        = gameObject.transform;
        shadowCasterContainer.transform.localPosition = lP;
        for (int i = 0; i < tilemapCollider.pathCount; i++)
        {
            Vector2[] pathVertices = new Vector2[tilemapCollider.GetPathPointCount(i)];
            tilemapCollider.GetPath(i, pathVertices);
            GameObject shadowCaster = new GameObject("shadow_caster_" + i);
            shadowCasters.Add(shadowCaster);
            PolygonCollider2D shadowPolygon = (PolygonCollider2D)shadowCaster.AddComponent(typeof(PolygonCollider2D));
            shadowPolygons.Add(shadowPolygon);
            lP = shadowCaster.transform.localPosition;
            shadowCaster.transform.parent        = shadowCasterContainer.transform;
            shadowCaster.transform.localPosition = lP;
            shadowPolygon.points  = pathVertices;
            shadowPolygon.enabled = false;
            //if (shadowCaster.GetComponent<ShadowCaster2D>() != null) // remove existing caster?
            //    Destroy(shadowCaster.GetComponent<ShadowCaster2D>());
            ShadowCaster2D shadowCasterComponent = shadowCaster.AddComponent <ShadowCaster2D>();
            shadowCasterComponents.Add(shadowCasterComponent);
            shadowCasterComponent.selfShadows = selfShadows;
        }
    }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        if (GUILayout.Button("Generate"))
        {
            TilemapShadows generator = (TilemapShadows)target;

            generator.GenerateShadowCasters();
            Object [] casters = generator.shadowCasters.ToArray();
            Undo.RecordObjects(casters, "GridShadowCastersGenerator name prefab instances");

            // set each caster's targetLayer
            for (int i = 0; i < generator.shadowCasters.Count; i++)
            {
            }
        }
    }