버그 해결을 위한 모든 질문을 던져
0 votes
260 views

개발 중인 게임은 내 캐릭터와 많은 NPC 들이 모여서 우르르 달려가는 방식입니다.

현재 유저와 NPC 모두 CharacterController 로 이동을 구현해 놓은 상태 입니다.

CharacterController.Move() 로 이동할 경우 정지해 있는 다른 캐릭터에 부딛히면 상대를 밀어내는 기능은 없지만 완전히 정면으로 부딛히지 않는 한 이동 방향으로 계속 비비면서 조금씩 옆으로 미끄러지듯 밀려나서 결국 옆으로 빠져나와 앞으로 달려나갑니다.

이는 다른 캐릭터의 CharacterController 에 붙어 있는 캡슐콜리더 뿐만 아니라 주변 오브젝트에 씌워놓은 박스콜리더 등에 부딛혔을 때도 동일하게 적용됩니다.

 

그런데 이번에 캐릭터들이 이동 중일 때 부딛히면 이리저리 굴러다니는 구슬 오브젝트가 추가되었습니다.

구슬 오브젝트는 물리 영향을 받으며 굴러다녀야 하니 Rigidbody 를 붙였구요.

문제는 CharacterController 로 이 Rigidbody 구슬과 충돌 시켰을 때 뭐랄까.. 정확하게 원하는 움직임이 나오지 않고 있습니다.

정확하게 표현하기가 애매한데 어떤 때는 NPC 와 부딛혀도 구슬이 안굴러 가거나 캐릭터가 구슬을 제대로 밀어내지 못하고 어쩔땐 오히려 자기가 밀리는 것처럼 보이기도 하고 암튼 뭔가 매번 다른 느낌입니다.

 

CharacterController 는 연산을 최소화하면서 물리적인 느낌을 내도록 구현되어 있다고 하니 Rigidbody 와 달리 이런 문제가 발생하는 것 같아서 테스트 삼아 모든 캐릭터 들의 CharacterController 를 제거하고 Rigidbody 로 바꿔서 이동을 구현해 봤습니다.

그랬더니 구슬과 부딛혔을 때 제가 기대했던 움직임에 일치하는 것을 확인했습니다.

 

그런데 다른 문제가 발생하고 있습니다.

처음 구현했던 대로 멈춰있는 상대와 부딛혔을 때 멈춘 캐릭터는 그대로 서있고 달려온 캐릭터가 비비면서 옆으로 빠져나가줘야 하는데요.

Rigidbody 로 바꿨더니 멈춰있는 캐릭터가 달려온 캐릭터 한테 밀려서 정지 모션 그대로 함께 쭉 밀려가 버립니다.

그래서 일단 정지하면 isKinematic 을 On 시키는 걸로 밀려나지 않게 구현해봤습니다.

그리고 테스트를 해보니 이번에는 달려온 NPC 가 멈춰있는 캐릭터나 주변 오브젝트에 부딛혔을 때 캡슐콜라이더든 박스콜라이더든 전혀 미끄러지지 않고 달리는 모션만 나오는 채 이동을 못해버리네요.

Rigidbody 는 CharacterController 처럼 비비면서 미끄러지지 못하는게 정상일까요??

 

 

정리하자면 제가 원하는 것은 아래와 같습니다.

 

1. 지금까지 처럼 CharacterController 를 사용할 경우

  • 이 경우 구슬의 Rigidbody 와 부딛혔을 때 Rigidbody 끼리 부딛힌것 처럼 동일한 물리 효과를 낼 수 있을까요

2. 캐릭터 이동을 Rigidbody 로 변경할 경우

  • 다른 캐릭터의 Rigidbody 와 부딛혔을 때 상대를 밀어내지 않지만 구슬의 Rigidbody 의 경우는 밀어내는 선택적 물리가 가능할까요(일단 isKinematic 을 껐다켰다 하는 방법은 찾았습니다만 다른 방법도 있는지 궁금합니다)
  • 가장 중요한 문제 -> Rigidbody 로 다른 kinematic 이 켜진 Collider 에 부딛혔을 때 상대 표면을 비비면서 미끄러져 이동할 수 있는 방법이 있을까요.

이 두가지 케이스 중 하나라도 해결이 가능하다면 그 방식을 선택 하려 합니다.

고수님들의 조언 부탁 드립니다!!!

폐쇄 기록: 문제에 대한 개인적인 착각. 해결됨
asked (26 point)
closed , 260 views

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

610 질문
767 answers
730 댓글
118,355 users