Unity/Unity 개발

탑다운 게임에서 곡사포 형식의 투사체 발사 구현

leedh1211 2025. 5. 14. 02:47

문제점

 

  • 일반적인 투사체는 직선 이동 → 목표지점 도달 시 Instantiate로 Area를 생성하고 끝났다.
  • 하지만 이번 구현은 점프 스킬처럼 포물선을 그리면서 이동 후, 지면에 장판이 깔리는 형태였다.
  • 문제는 충돌 처리를 어디에서 해야 하는가였다. 단순히 Collider를 항상 켜두면, 올라가는 도중에 닿아도 충돌이 발생한다. 따라서 OnTriggerEnter2D()로 정확한 타이밍을 제어하기 어려웠다.
  • 한 프레임 동안만 Collider를 켜는 방식으로 감지를 시도했지만, 이 경우에도 플레이어가 정확히 위에 없으면 감지가 되지 않거나, Collider가 켜지기 전에 이미 지나쳐버리는 문제가 발생했다.

 

시도한 것

 

  • Area 생성 후 CircleCollider2D.enabled = true → yield return null → false 방식으로 충돌 시도
  • 콜라이더를 항상 꺼두었다가 DoImpact()라는 함수에서만 임시로 켜는 방식

 

해결 방안

 

  • Physics2D.OverlapCircleAll()을 사용하여 특정 타이밍에 범위 내 존재하는 대상에게 직접적으로 명시적인 피격 처리를 수행
  • 이를 통해 Collider 트리거 이벤트에 의존하지 않고, Area 도착 시점에 한 번만 정확한 충돌 판정을 구현할 수 있었다
  • 또, Area 자체의 시각적 크기와 충돌 범위를 분리해두면 장판 연출은 유지하면서, 충돌 로직은 정확하게 관리할 수 있다

 

주석

FixedUpdate는 프레임당으로 연산하는것이아닌 특정 기간마다 연산하므로, 프레임단위로 짤라서 하는 동작과 연결시키기에는 적합하지않았다. 또한, 웹에서 개발을 하던사람으로서 Wait류의 함수를 쓰는것은 꺼려졌기때문에, 로직적으로 해결할 수 있는 방법을 고민했는데, 다행이 Wait을 사용하지않고 특정 시점에 충돌을 체크할 수 있어서 다행이였다.