문제점
- 일반적인 투사체는 직선 이동 → 목표지점 도달 시 Instantiate로 Area를 생성하고 끝났다.
- 하지만 이번 구현은 점프 스킬처럼 포물선을 그리면서 이동 후, 지면에 장판이 깔리는 형태였다.
- 문제는 충돌 처리를 어디에서 해야 하는가였다. 단순히 Collider를 항상 켜두면, 올라가는 도중에 닿아도 충돌이 발생한다. 따라서 OnTriggerEnter2D()로 정확한 타이밍을 제어하기 어려웠다.
- 한 프레임 동안만 Collider를 켜는 방식으로 감지를 시도했지만, 이 경우에도 플레이어가 정확히 위에 없으면 감지가 되지 않거나, Collider가 켜지기 전에 이미 지나쳐버리는 문제가 발생했다.
시도한 것
- Area 생성 후 CircleCollider2D.enabled = true → yield return null → false 방식으로 충돌 시도
- 콜라이더를 항상 꺼두었다가 DoImpact()라는 함수에서만 임시로 켜는 방식
해결 방안
- Physics2D.OverlapCircleAll()을 사용하여 특정 타이밍에 범위 내 존재하는 대상에게 직접적으로 명시적인 피격 처리를 수행
- 이를 통해 Collider 트리거 이벤트에 의존하지 않고, Area 도착 시점에 한 번만 정확한 충돌 판정을 구현할 수 있었다
- 또, Area 자체의 시각적 크기와 충돌 범위를 분리해두면 장판 연출은 유지하면서, 충돌 로직은 정확하게 관리할 수 있다
주석
FixedUpdate는 프레임당으로 연산하는것이아닌 특정 기간마다 연산하므로, 프레임단위로 짤라서 하는 동작과 연결시키기에는 적합하지않았다. 또한, 웹에서 개발을 하던사람으로서 Wait류의 함수를 쓰는것은 꺼려졌기때문에, 로직적으로 해결할 수 있는 방법을 고민했는데, 다행이 Wait을 사용하지않고 특정 시점에 충돌을 체크할 수 있어서 다행이였다.
'Unity > Unity 개발' 카테고리의 다른 글
| 탈것 시스템 설계 및 탑승 구조 구성 (0) | 2025.06.04 |
|---|---|
| Unity에서 컴포넌트 참조 방식 비교 및 최적화 전략 (1) | 2025.05.20 |
| SpriteRenderer 기준으로 Collider가 부정확하게 설정됨 (0) | 2025.05.14 |
| 몬스터 스킬 시스템 설계 및 개선 과정 (0) | 2025.05.12 |
| A* 경로 탐색 알고리즘 적용 (0) | 2025.05.12 |