odyssey

#17 odyssey 개발일지 : 캐릭터 움직임 수정

san10 2023. 7. 31. 16:22

맨 처음에 게임을 기획했을땐

알토의 모험처럼 곡선의 지형을 따라 움직이는 거였는데..

생각해보니 그럼 너무 알토의 모험과 비슷해지는 것 같아서..

캐릭터 조작 방식을 바꿨다.

 

지형을 따라 자동으로 이동하는게 아니라

일반적인 2d 캐주얼 레이싱 게임처럼

버튼을 누르면 전진하게 만들려고 한다!

조작 방식은 위의 두게임을 많이 참고했다.

 

 

캐릭터 스프라이트

스쿠터 탄 오리

조작법을 수정하는 김에 캐릭터도 그렸다!

 

 

구현

https://san10.tistory.com/4

 

#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로 힘을 가하면 무한정 속도가 커져서

속도의 크기를 구해서 일정 이상으로 커지면

방향을 구해서 직접 속도를 조정했다.

 

 

그런데 문제가.....

움짤에는 잘 안담겼지만

위로 튈 상황이 아닌데도 비정상적으로 위로 튀는 현상이 있었다!

 

심하게 위로 튀면 어색하기도 하지만

잘못하면 바로 게임오버가 될 수도 있기에 수정해줘야 하는데..

문제는 원인을 잘 모르겠다!^_^

 

여러번 테스트해보니 곡률이 변할때 위로튀는 현상이 있고

곡률의 변화가 심할수록, 속도가 빠를수록 더 심한것 같았다.

 

캐릭터 회전이 부드럽지 않은게 원인인가 해서 보간을 해줬는데도

별 성과는 없었고..

원래 캐릭터 콜라이더로 아래처럼 원형 콜라이더를 두개 달아줬었는데

이게 문제가 되는게 아닐까? 하는 생각이 들어서 아래처럼 박스 콜라이더로 변경해보니..

이렇게..

아까보단 좀더 안정적인 플레이가 가능하다

근데 이 방식은 이것대로 버그가 있긴한데..

일단은 여기서 마무리하고 나중에 좀더 손보기로! ^~^