using UnityEngine; public class GameObjectPlacementButton : UnitPlacementButton { [SerializeField] private GameObject _prefab; protected override void Place() { var instance = Instantiate(_prefab); //we need to do that before stripping the object var detectComp = instance.GetComponentInChildren(); Rect detectionRect = default; if(detectComp) detectionRect = instance.GetComponentInChildren().DetectionRectangle; //strip the objecty foreach (var comp in instance.transform.GetAllComponents()) Destroy(comp); foreach (var comp in instance.transform.GetAllComponents()) Destroy(comp); foreach (var comp in instance.transform.GetAllComponents()) Destroy(comp); foreach (var comp in instance.transform.GetAllComponents()) { var color = (comp as SpriteRenderer).color; color.a = 0.6f; (comp as SpriteRenderer).color = color; (comp as SpriteRenderer).material = _outlineMaterial; } var placeholder = instance.AddComponent(); placeholder.Prefab = _prefab; CreateRange(placeholder, detectionRect); } void CreateRange(DraggablePlaceholder placeholder, Rect detectionRect) { if (detectionRect == default) return; var detection = new GameObject("Detection"); var rend = detection.AddComponent(); rend.sprite = _detectionRangeSprite; rend.sortingLayerName = "Character"; rend.sortingOrder = 0; rend.color = new Color(1, 1, 1, 0.2f); detection.transform.SetParent(placeholder.transform); detection.transform.localPosition = detectionRect.center; detection.transform.localScale = detectionRect.size; } }