맨 처음에 게임을 기획했을땐
알토의 모험처럼 곡선의 지형을 따라 움직이는 거였는데..
생각해보니 그럼 너무 알토의 모험과 비슷해지는 것 같아서..
캐릭터 조작 방식을 바꿨다.
지형을 따라 자동으로 이동하는게 아니라
일반적인 2d 캐주얼 레이싱 게임처럼
버튼을 누르면 전진하게 만들려고 한다!
조작 방식은 위의 두게임을 많이 참고했다.
캐릭터 스프라이트
조작법을 수정하는 김에 캐릭터도 그렸다!
구현
#1 odyssey 개발일지 : 지형 생성, 캐릭터 움직임 구현
컨셉아트도 대충 짰고 이제 본격적으로 개발을 해야한다. 1. 지형생성 우선 처음으로 한 일은 지형생성인데 곡선의 언덕을 어떻게 만들까 고민했고, 우선 지금 지형을 생성하는 방식은 1. 폴리곤
san10.tistory.com
원래 일정 속도로 움직이게 하고싶어서
지형의 노말 벡터를 투영해서 이동방향을 구한다음 직접 velocity를 수정했었는데..
이번엔 누른만큼 더 빠르게 움직이도록 구현하고싶어서
이번엔 AddForce로 구현했다
그리고 이전처럼 공중에서는 앞 또는 뒤로 회전할 수 있게 만들었다
구현한 방식은..
지형의 기울기를 구해서 캐릭터를 그 기울기만큼 기울여주고
캐릭터를 기준으로 앞쪽으로 AddForce했다
private void ChangePlayerAngle()
{
if (slopeHit)
{
if (raycastHit.normal.x >= 0)
{
playerAngle = -Vector3.Angle(upDirection, raycastHit.normal);
}
else
{
playerAngle = Vector3.Angle(upDirection, raycastHit.normal);
}
transform.localEulerAngles = new Vector3(0, 0, playerAngle);
}
}
public void Handle(PlayerController controller)
{
if(controller.rigid.velocity.magnitude >= controller.maxWalkForce)
{
controller.rigid.velocity = controller.rigid.velocity.normalized * controller.maxWalkForce;
}
else
{
controller.rigid.AddForce(controller.transform.right * controller.walkForce);
}
}
그리고 계속 addforce로 힘을 가하면 무한정 속도가 커져서
속도의 크기를 구해서 일정 이상으로 커지면
방향을 구해서 직접 속도를 조정했다.
그런데 문제가.....
움짤에는 잘 안담겼지만
위로 튈 상황이 아닌데도 비정상적으로 위로 튀는 현상이 있었다!
심하게 위로 튀면 어색하기도 하지만
잘못하면 바로 게임오버가 될 수도 있기에 수정해줘야 하는데..
문제는 원인을 잘 모르겠다!^_^
여러번 테스트해보니 곡률이 변할때 위로튀는 현상이 있고
곡률의 변화가 심할수록, 속도가 빠를수록 더 심한것 같았다.
캐릭터 회전이 부드럽지 않은게 원인인가 해서 보간을 해줬는데도
별 성과는 없었고..
원래 캐릭터 콜라이더로 아래처럼 원형 콜라이더를 두개 달아줬었는데
이게 문제가 되는게 아닐까? 하는 생각이 들어서 아래처럼 박스 콜라이더로 변경해보니..
아까보단 좀더 안정적인 플레이가 가능하다
근데 이 방식은 이것대로 버그가 있긴한데..
일단은 여기서 마무리하고 나중에 좀더 손보기로! ^~^
'odyssey' 카테고리의 다른 글
#19 odyssey 개발일지 : 캐릭터 컨트롤러 버그 수정 (0) | 2024.01.14 |
---|---|
#18 odyssey 개발일지 : 반사광, 렌즈 플레어 추가 (0) | 2023.08.10 |
#16 odyssey 개발일지 : 캣멀롬 스플라인으로 지형 보간 (0) | 2023.07.29 |
#15 odyssey 개발일지 : 지형 생성기 만들기 (0) | 2023.07.24 |
#14 odyssey 개발일지 : 낮/밤 시스템 만들기 (0) | 2023.07.22 |