숙련주차 프로젝트
- 오늘은 숙련주차 프로젝트 발제가 있었던 날이었다. 주제는 거의 자유주제급이어서 원하는 기능들을 한번 시험해보고 구현해보고자 해서 팀원분들과 회의를 나눴다.
- 이런저런 얘기했는데 우리는 포트리스류 포격게임을 만들어 보고 싶어서 플랫포머 2D형식의 게임을 만들기로 했다!
- 서버기능도 추가해 멀티대전까지 하는것이 목표긴한데 시간이 될지모르겠다. 추후 가능하다면 꼭 붙이고 다양한 기능을 넣어봐야겠다. 일단은 간다하게 적과 싸우는 게임으로만 만들어볼 예정이다
ChracterController
- 움직임에 관해 이런저런 정보를 찾아보다 케릭터 컨트롤러라는 컴포넌트를 알게 되어 Rigidbody와의 움직임에는 차이가 있다고 해서 정리해 보고 싶어서 간단하게 정리를 했다.
<출처 유니티 공식 문서>
ChracterController란
- Rigidbody기반 물리를 사용하지 않는 3인 또는 1인 플레이어에 주로 사용되는 컴포넌트
프로퍼티
- Slope Limit : 콜라이더가 명시된 값보다 작은 경사도만 오르도록 설정
- Step Offset : 명시된 값보다 계단이 땅에 가까운 경우에만 올라감(계단의 폭)
- Skin width : 콜라이더가 관통할 수 있는 너비
- Min Move Distance : 케릭터가 지정한 값보다 낮게 움직이려고 하면 아에 움직이지 않음 지터링을 줄이기 위해 이 옵션을 사용(지터링? : Jitter 조금씩 움직이다 덜덜 떨다 라는 뜻으로 테블릿에서 선을 일직선으로 그을 때 실제로 펜의 궤적에 비해 화면상에 출력되는 선이 물결치듯 불안정하게 떨리는현상)
- Center : 캡슐콜라이더의 오프셋 피벗에는 영향을 주지않음
- Radius : 캡슐콜라이더의 반지름 길이
- Height : 캡슐콜라이더의 높이
내장 메소드, 속성
- Move : 기본적인 움직임을 구현해주는 함수
- OnControllerColliderHit : 콜라이더와 충돌 시 발생하는 이벤트
- SlopeLimit() 속성 : 경사로를 올라갈 때의 속도를 제한 할때 사용
좀더 자세한 속성들은 여기!
https://docs.unity3d.com/kr/530/ScriptReference/CharacterController.html (유니티 공식문서)
장,단점
- 플레이어의 입력을 사용하여 케릭터 제어가 수비다.
- 물리적 충돌을 고려하지 않아 움직임이 부드럽다.
- 계단이나 경사로를 올라갈 때 움직임의 제어가 가능하다.
- 물리적 충돌을 고려하지 않아 장애물과의 충돌에 반응이 어색하다.
- 케릭터 콜라이더가 지닌 캡슐콜라이더에 따라 움직임이 달라진다.
Rigidbody와의 비교
- 보통 Rigidbody에도 이런 이동관련해서 많이 사용이 되는 컴포넌트인데 Rigidbody의 경우는 물리적인 상호작용이 많이 들어가서 이부분이 가장 큰 차이가 있다고 보면 된다. 물리적 연산을 해 주기때문에 직접 물리를 구현하지 않고도 물리적 특성을 사용할 수 있다.
- 다만 Rigidbody의 경우 물리연산에 성능에 무리가 가기에 최적화가 중요해진다. 또한 자신이 원하는 물리적 특성을 구현하기위해선 유니티가 제공해주는 방식이 아닌 따로 또 추가적으로 물리 로직을 추가시켜줘야 한다.
언제 쓰면 좋을까
- 물리적인 상호작용이 많다면 Rigidbody가 좋고 그렇지 않다면 CharacterController가 좀 더 좋을것이다. 다만 각 개발 상황에 맞게 적합한 방식을 선택할 필요가 있다.
오늘의 회고
- 숙련주차 팀프로젝트를 진행하는데 팀원분들 열의가 넘쳐서 재미있는 프로젝트가 될 것같다. 내가 모르는 부분들도 있어서 많이 배울 수 있을것같다
- 날이 많이 더워서 집중이 조금 떨어지고 체력관리도 필요한것같다. 몸관리 잘해야겠다. 올여름은 더욱더 덥다니까 몸보신도 잘 하고 건강도 챙겨야겠다.