• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

13:50

21.01.14 12:19 작성 조회수 384

2

안녕하세요!

13:50부터 등장하는 플레이어가 이동할 때 몬스터를 밀 수 있는 현상을 고치시는 방법에 대한 질문입니다.

이 밀리는 현상이 NavMeshAgent를 사용해서 이동시키는 것과 어떤 관계가 있는 것인지 잘 와닿지가 않아서요! ㅠㅠ 왜 nma.Move 함수 사용에서 transform.position 을 업뎃해주는 방식으로 바꾸면 위 현상이 고쳐지는 것인가요?

답변 3

·

답변을 작성해보세요.

4

https://stackoverflow.com/questions/23451983/how-to-avoid-two-navmeshagent-push-away-each-other-in-unity

특별히 '이해'를 하는 영역이 아니라,
그냥 유니티가 그렇게 되어 있습니다.

NavMeshAgent를 붙여서 NavMesh를 이용한 이동 방식은
(Collision을 이용해) 기본적으로 Agent끼리 서로 피해가도록 되어 있는데,
하나를 이동시키면 너무 인접하게 되어 의도하지 않게 상대를 밀치기도 합니다.

이를 가장 쉽게 해결할 수 있는 방법은
박쥐처럼 앞으로 레이저를 쏴서 정말 이동 가능한지를 한 번 더 확인하는 것인데
NavMeshAgent을 사용하지 않고
일반 이동을 할 경우에는 위 현상이 일어나지 않습니다.

3

Collider가 붙었다고 무조건 꼭 충돌이 되는 것은 아니고,
어떤 함수(기능)을 사용했느냐가 중요합니다.
유니티 물리 시스템을 사용했다거나, NavMeshAgent 등을 사용했다거나
하는 조건에 따르는데, 만약 IsKinematic 설정으로 물리 시스템도 적용받지 않는 상태라면
Collider는 그냥 참고용 정보일 뿐입니다.

추가로 MMO에서는 서버단에서 충돌 체크하기가 워낙 힘들기 때문에
유닛끼리 충돌은 하지 않는 경우가 거의 99%입니다.

1

안소님의 프로필

안소

질문자

2021.01.14

답변 감사드립니다. 

근데 답변 보고 생긴 논외의 질문이긴한데..

이제 NavMeshAgent로 이동하지 않으니까 플레이어와 몬스터가 서로 밀지 않고 심지어 관통해서 지나갈 수도 있게 되었더라구요.

근데 플레이어도 몬스터도 둘 다 Is Trigger가 체크되어 있지 않은 Collider가 붙어 있는데 생각해보니 왜 관통이 될까 싶기도 하네요. Collider가 붙어있으면 관통이 되지 않는걸로 알고 있는데 혼란스럽습니다.