본문 바로가기
유니티 게임 개발

[유니티 강좌] 2D RPG 게임 만들기 - 8 / 벽에 붙는 현상

by 호일이 2021. 3. 15.

 안녕하세요. 오랜만에 포스팅입니다. 그동안 댓글로 응원해주신 분들 모두 감사드리고 죄송합니다!

 

 현재까지 진행된 프로젝트 압축 파일은 구글 드라이브에 올려놨습니다. 혹시 막히시면 참고해주세요.

 

RPG 만들기 - Google Drive

이 폴더에 파일이 없습니다.이 폴더에 파일을 추가하려면 로그인하세요.

drive.google.com

 

 이번에 다룰 주제는 유니티의 포럼과 질문에 여러 번 등장한 주제이니만큼 그냥 넘길 수는 없을 것 같습니다.

 벽 쪽으로 이동하면서 벽면을 타면 잘 미끄러지지 않게 되는 문제입니다.

transform.Translate를 사용할 때는 문제 없지만, Rigidbody.AddForce, Rigidbody.velocity같은 물리적으로 작동하는 함수로 이동할 때만 해당 현상이 발생합니다.

 

 게임에 아주 큰 영향을 주기 때문에 유니티 질문사이트에서 많은 사람이 질문을 했고, 다양한 해결방법이 나왔습니다.

1. Platform Effector 2D 추가

 아마 가장 간단하고 완벽한 방법이 아닐까 합니다. 위와 같은 문제가 일어나는 근본적인 이유는 마찰력 때문입니다. 마찰력을 0으로 만들면 더는 벽과 부비부비하는 일은 일어나지 않습니다.

 

 하지만 캐릭터 자체의 마찰력을 0으로 만들면, 지면에서 움직일 때 멈추지 않고 미끄러지므로

측면의 마찰력만 0으로 만들어야 문제가 해결됩니다.

 

 Platform Effector 2D 컴포넌트는 측면 마찰력만 따로 조절하는 기능을 제공해줍니다.

 캐릭터에 Platform Effector 2D를 추가해주고, 기존의 Collider 2D의 Used By Effector를 체크해줍니다.

Platform Effector 2D의 Use One Way를 체크 해제, Use Side Friction을 체크 해제하면 끝입니다.

2. 2개의 Collider 2D 생성

 만약 Platform Effector 2D를 추가해도 안 되는 경우, 혹은 추가할 수 없는 상황을 위한 차선입니다.

 2개의 Collider 2D를 생성하고 몸통보다 작게 만든 Collider를 약간 밑에 배치합니다.

그리고 몸통엔 Friction이 0인 Physics Material을 넣습니다.

 

Physic Material 생성 방법 (Project창에서 우클릭 -> Create -> Physic Material)

 

 발판엔 마찰력이 존재하고, 몸통엔 마찰력이 없는 형태를 만들어서 측면의 마찰력을 없애는 방법입니다. Collider를 2개나 만들어 혹시 모를 오류가 생길 수도 있으니 추천하지는 않습니다.

반응형

댓글