using UnityEngine; public class TowerRangeOverlay : MonoBehaviour { [SerializeField] private GameObject _rangeSprite; private TowerAttack _towerAttack; private AreaTowerAttack _areaTowerAttack; void Awake() { _towerAttack = GetComponentInParent(); _areaTowerAttack = GetComponentInParent(); ShowRange(false); } public void UpdateRangeScale() { if (_rangeSprite == null) return; float currentRange = 0; if (_towerAttack != null) currentRange = _towerAttack.range; else if (_areaTowerAttack != null) currentRange = _areaTowerAttack.range; // 1. BuildManager가 건드린 현재 오브젝트(고스트 루트)의 스케일을 가져옵니다. Vector3 myScale = transform.localScale; // 2. 월드 크기 고정 계산 // 월드에서 보여야 할 지름은 (currentRange * 2)입니다. // 자식의 스케일 * 부모의 스케일 = 월드 스케일이므로, // 자식의 스케일 = (원하는 월드 스케일) / 부모의 스케일 입니다. float finalScaleX = (currentRange * 2f) / myScale.x; float finalScaleZ = (currentRange * 2f) / myScale.z; // 3. 자식(Sprite)에게 계산된 스케일 적용 _rangeSprite.transform.localScale = new Vector3(finalScaleX, finalScaleZ, 1f); } public void ShowRange(bool show) { _rangeSprite.SetActive(show); if (show) UpdateRangeScale(); } }