사정거리 내에 들어오면 이런식으로 탄을 쏘는 타워디펜스 게임을 만드는 중임.
그런데 Distance가 이상하게 거리를 측정하는 문제가 있음.
저 사정거리 표시하는 원은 설정된 사정거리대로 크기를 정함.
그래서 사정거리 안의 적들은 저 원 안에 들어가 있는걸로 표시가 됨.
그런데 문제는 저렇게 사정거리를 나갔는데도 공격을 해버린다는거임.
If문의 문제인가 싶어서 디버그를 확인해봤는데 저렇게 나갈때만 Distance의 측정이 이상해짐.
많이 작아서 잘 안보일수도 있지만 디버그 창에 지금 노리고 있는 타겟과의 거리가 나와있음.
(타겟하고 있는 적과의 거리) and 4 (사정거리)
왜 들어갈때와 나갈때의 거리 측정 단위가 달라지는지 이유를 도저히 모르겟다...
IEnumerator TryAttackParticleBullet()
{
while (true)
{
// 적이 사정거리 내에 있는지 확인
if (!IsPossibleToAttackTarget())
{
attackTarget = null;
ChangeState(WeaponState.SearchTarget);
yield break;
}
// 더 나은 타겟이 있는지 확인
Transform betterTarget = FindBetterTarget();
if (betterTarget != null && betterTarget != attackTarget)
{
attackTarget = betterTarget;
}
// 공격 수행
Shoot();
// 공격 딜레이
yield return new WaitForSeconds(template.weapon[level].rate);
}
}
bool IsPossibleToAttackTarget()
{
if (attackTarget == null)
return false;
float distance = Vector3.Distance(attackTarget.position, transform.position);
debug = distance;
if (distance > template.weapon[level].range)
{
attackTarget = null;
return false;
}
Debug.Log(distance + " and " + template.weapon[level].range);
return true;
}
Transform FindBetterTarget()
{
Transform bestTarget = attackTarget; // 현재 타겟
float closestDistance = CalculateRemainingDistance(attackTarget.GetComponent<Enemy>());
int bestWayPointIndex = attackTarget.GetComponent<Enemy>().GetCurrentIndex();
// 다른 적들을 탐색해 현재 타겟보다 더 우선순위가 높은 적을 찾음
for (int i = 0; i < enemySpawner.enemyList.Count; ++i)
{
Enemy enemy = enemySpawner.enemyList[i];
float remainingDistance = CalculateRemainingDistance(enemy);
int enemyWayPointIndex = enemy.GetCurrentIndex();
// 더 멀리 진출한 적이 있거나, 같은 웨이포인트를 향해 가는 적 중에 더 가까운 적을 찾아 타겟 변경
if (enemyWayPointIndex > bestWayPointIndex ||
(enemyWayPointIndex == bestWayPointIndex && remainingDistance < closestDistance))
{
bestTarget = enemy.transform;
closestDistance = remainingDistance;
bestWayPointIndex = enemyWayPointIndex;
}
}
// 현재 타겟보다 더 나은 적을 찾았으면 반환, 없으면 null 반환
return bestTarget != attackTarget ? bestTarget : null;
}
로컬포지션문제려나? 타워는안움직일테니 저 움직이는애 위치를 디버그찍어보면되겟네
코드 첨부해서 같이 보자 - dc App
진짜 애들 착하다 질문하는 애가 질문하는 법도 안지키고 질문하는데 대답잘해주노
다른 스크립트는 다 정상작동하고 저 Vector3 Distance 한줄에서 측정이 잘못되는게 문제인거라 스크립트 보다는 어디 오브젝트 좌표가 이상해서 그런건가 싶어서 물어본거임. 측정하는데 들어가는 값도 다 Transform 타입이고 그래서... 근데 또 저 타워나 적 오브젝트 확인해보면 오차날 좌표도 아니란 말이야...
+ Z 값은 전부다 0으로 맞춰놨음
현재 스샷으로 판단해보자면 사거리에 들어온 적들중 가장 앞에 있는 놈부터 때리는듯한데, 가장 앞에 있는놈이 사거리를 벗어나면 사거리 안에서 다른 적으로 타겟을 변경하지 않은게 아닐까 생각된다. 분명 가장 앞에 있는놈은 사거리를 벗어났지만 타겟은 변경되지 않았고, 뒤에 있는 다른 놈들은 사거리 안에 있기 때문에 계속 공격을 받는거지. 맞는지 아닌지 확인 좀 - dc App
관리하는 코드 첨부해서 글 수정해봤음.
아... 적들 우선순위를 정하는 코드에서 사정거리 내에 있는 적들을 한해서 묶지 않아서 밖에 있는애를 타겟한거 같음
코드 문제가 맞았네 미안...
오늘도 인디 탐정단이 한건 해냈군... - dc App
distance 측정이 이상한게 아니라 target을 어딘가에 저장해놨는데 나오고 나서도 그걸 나갈 때 안 지워서 거기에다 계속 때려밖는거 아님? - dc App