Post

TPS 개발 : 대쉬 넉백 — 스피어 콜리전과 채널 분리

대쉬로 적을 밀어내는 기능 — 방향 콜리전의 문제와 스피어 콜리전, 그리고 탄/대쉬 채널 분리

TPS 개발 : 대쉬 넉백 — 스피어 콜리전과 채널 분리

TPS 개발 - 대쉬 넉백

대쉬로 타쿠(적)들을 밀어내는 기능을 구현했다. 별거 아닐 줄 알았는데 콜리전 문제가 두 번 튀어나왔다.


1차 시도 — 대쉬 방향으로 콜리전 생성

처음엔 단순하게 갔다. 대쉬하는 방향으로 콜리전을 생성해서, 거기 걸리는 적들을 싹 밀어내고 날려버리는 방식.

1
2
3
대쉬 입력
  └─ 대쉬 방향으로 긴 콜리전 생성
       └─ 겹치는 타쿠 전부 넉백

문제 — 멀리 있는 애들이 미리 날아간다

방향으로 콜리전을 길게 뻗다 보니, 아직 도달하지도 않은 멀리 있는 적들이 미리 날아가는 이슈가 생겼다. 대쉬 경로 상에 있기만 하면 거리와 상관없이 넉백돼버린 것이다.

내가 아직 거기 안 갔는데 적이 먼저 날아가니 영 어색했다.


2차 시도 — 캐릭터에 스피어 콜리전

방향 콜리전을 버리고, 캐릭터에 스피어 콜리전 하나를 박아뒀다. 그리고 대쉬하면서 그 구체 안에 실제로 충돌하는 객체들만 날려보냈다.

1
2
캐릭터에 Sphere Collision 부착
  └─ 대쉬 중 구체에 들어온 타쿠만 넉백

내 몸 주변에 실제로 닿은 적만 밀려나니, “내가 지나가면서 부딪힌 애들이 날아간다”는 자연스러운 느낌이 나왔다.


문제 — 총을 쏘니 대쉬가 맞는다

그런데 새 버그가 생겼다. 총을 쏘니까 대쉬 넉백이 발동하는 것이다.

원인은 콜리전 채널이었다. 탄 피격 판정과 대쉬 넉백 판정이 같은 채널을 공유하다 보니, 총알이 대쉬용 스피어 콜리전을 건드려서 엉뚱하게 넉백이 터졌다.

히트 판정 만들 때 채널 세팅으로 고생했는데, 여기서 또 채널이 발목을 잡았다.


해결 — 채널 분리

타쿠 탄 피격 전용 채널타쿠 대쉬 피격 전용 채널을 따로 팠다.

채널용도
타쿠 탄 피격 채널총알이 적을 맞추는 판정
타쿠 대쉬 피격 채널대쉬 스피어가 적을 밀어내는 판정

이렇게 분리하니 탄으로는 대쉬 콜리전이 안 맞게 되어서, 총을 쏴도 넉백이 발동하지 않았다. 각 판정이 자기 채널만 신경 쓰면 되니 서로 간섭이 사라졌다.


오늘 정리

  • 대쉬 방향 콜리전 → 멀리 있는 적이 미리 날아가는 문제
  • 캐릭터에 스피어 콜리전을 박아 실제 충돌한 적만 넉백
  • 탄과 대쉬가 같은 채널을 공유해 총 쏘면 넉백되는 버그
  • 탄 피격 채널 / 대쉬 피격 채널 분리로 간섭 제거
This post is licensed under CC BY 4.0 by the author.