43 lines
1.5 KiB
C#
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();
|
|
}
|
|
} |