Files
ProjectMD/Assets/Scripts/Tower/TowerRangeOverlay.cs

43 lines
1.5 KiB
C#

using UnityEngine;
public class TowerRangeOverlay : MonoBehaviour
{
[SerializeField] private GameObject _rangeSprite;
private TowerAttack _towerAttack;
private AreaTowerAttack _areaTowerAttack;
void Awake()
{
_towerAttack = GetComponentInParent<TowerAttack>();
_areaTowerAttack = GetComponentInParent<AreaTowerAttack>();
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();
}
}