1인 개발/Push And Slash

푸쉬앤슬래시 개인 프로젝트 33일차

잼잼재미 2024. 7. 4. 10:32

트러블 슈팅


1. 멀티 공격 시, 콜라이더 인식하지 못함


PC -> 모바일

 

 

빌드 후, 위 처럼 공격이 적용되어야 하지만, 안드로이드 환경에서는 공격이 진행되지 않았다. 이 오류를 해결하기 위해 구글링을 엄청했지만, 모든 방법이 적용되지 않았다.

 

 

시도한 방법

1. CompareTag("Player") 대신 tag == "Player" 사용

구글링 결과, 콜라이더의 tag를 판별하는 CompareTag가 모바일 환경에서 제대로 작동하지 않는 경우를 확인. tag == "Player" 로 수정했지만, 해결 실패

 

2. Tag 판별 대신, Layer 판별 

콜라이더의 Tag로 판별이 문제가 있을 수 있다고 생각해서 Layer로 판별했지만 해결 실패

 

3.Tag명 변경

기존에 유니티에 있던 Player Tag명이 아닌 다른 Tag명을 적용, 해결 실패

 

4. 무기 콜라이더 크기 수정

무기 콜라이더의 크기가 작아서 충돌하지 못할 수도 있다고 생각해서 크기를 수정, 해결 실패

 

5. 무기 콜라이더에 Rigdbody 추가

Rigdbody는 충돌체 중, 하나만 존재하면 되지만, 어떠한 이유 때문에 Player에 있는 Rigdbody가 인식하지 못한다고 생각해서 무기에 Rigdbody를 추가, 해결 실패

 

6. Rigdbody의 Collision Detection 을 Discrete -> Continous 변경

충돌체가 아주 빠른 경우, 콜라이더가 무시되는 경우를 확인. 위 처럼 수정해서 빠른 경우에도 충돌할 수 있도록 수정했지만, 해결 실패

 

7. Fixed Timestep을 0.02 -> 0.01 변경

물리 연산이 일어나는 단위를 짧게 수정했지만 해결 실패

 

 

위와 같은 방법을 포함한 정말 많은 방법을 시도했지만, 모두 안드로이드 환경에서 공격이 적용되지 않았다. 공격 시, 무기가 콜라이더를 관통하는 것으로 보아, 콜라이더 자체를 인식하지 못한다고 생각했다. 그 이유는 모바일의 경우, PC 에디터 보다 사양이 낮기 때문에 멀티 플레이를 통신하는 과정에서 콜라이더를 제대로 인식하지 못한다고 생각했다. 

 

 

해결 방법

 

Player의 Rigidbody의 Interpoate를 Interpolate -> None으로 변경했다. Player의 이동을 유료 에셋을 사용했는데, Interpolate가 초기값으로 설정되어있었다.

 

Interpolate : 리지드바디의 움직임이 어색해 보일 경우, 다음 옵션 중에서 하나를 시도해야 함.

  • None : 보간이 적용되지 않습니다.
  • Interpolate : 이전 프레임의 트랜스폼에 맞게 움직임을 부드럽게 처리합니다.
  • Extrapolate : 다음 프레임의 트랜스폼을 추정해 움직임을 부드럽게 처리합니다.

 

Interpolate와 Extrapolate 설정 시, 모두 모바일 환경에서 콜라이더를 인식하지 못했다. 각각 정확히 어떤 의미인지는 더 알아봐야 할 것 같지만 None으로 설정해야 이 오류가 해결됐다.

 

 

 

이 방법으로 PC -> 모바일, 모바일 -> PC 모두 공격이 적용되도록 했다. 해결 완료!

 

 

회고


처음부터 PVP 게임을 만드는게 목적이었던 만큼, 멀티 전투는 필수적이었다. 멀티 전투는 예전에 이미 구현했지만, 빌드 후, 모바일로 테스트를 하니 위 처럼 전투가 정상적으로 진행되지 않았다. 이 부분 때문에 거의 일주일이라는 시간을 날렸다. 구글링을 통해, 할 수 있는 시도는 거의 모두 다 해봤으며, 결국에는 아주 간단한 문제로 되지 않았던 것이다. 위 부분은 내가 Player의 이동을 구현했다면 문제가 되지 않았을 부분인데, 유료 에셋을 사용하다 보니, 많은 부분이 이미 구현되어 있었고, 그런 에셋을 정확한 이해 없이 그냥 가져와 썼기 때문에 생긴 실수라고 생각한다. 오류를 수정하면서 아주 많이 답답했지만, 아주 간단한 셋팅값 설정으로 쉽게 해결해서 한편으로는 너무 허무했지만, 일주일을 스트레스 받았던 만큼 정말 기분이 좋았다. 이제 마지막으로 기존 구현했던 Enemy를 수정하여 보스를 구현하고, QA 테스트를 진행하고 프로젝트를 마무리 하도록 하겠다!