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++) { } } }