TIL 트러블 슈팅-SpartaMetaVerse-1

rain cloud·2025년 7월 25일
0

TIL

목록 보기
7/11

트러블 슈팅

  • 탑다운 형식의 2D 게임을 프로젝트로서 제작하고 있던 중, 점프를 구현하는데 있어서 꽤 많은 어려움을 겪었다.
  • 이를 해결한 과정을 작성할 예정

배경

  • 탑다운 형식의 2D 프로젝트를 제작하고 있던 도중, 필수 기능 가이드의 1번에 참고 프로젝트를 보았습니다.
  • 플래피버드의 캐릭터 점프 로직을 참고하라는 내용이 있어서, 캐릭터의 점프 기능을 구현해야 하는 줄 알고 구현을 시작하였습니다.
  • 나중에 그냥 참고만 하라는 것을 알게되었습니다.

발단

  • 플래피 버드의 점프로직을 참고해서 작성을 진행해봤습니다
  • Input System을 활용해서 점프 키를 SpaceBar로 설정하였고, 입력 신호도 스크립트에서 처리해 주었습니다.
  • flapForce도 설정해서 입력했을 시 Rigidybody2D의 velocity.y의 값에 더해주도록 하였습니다.
  • 문제는 탑다운 형식이라서 Gravity를 부여할 수 없었고, 이러한 중력의 부재는 점프로 올라간 y 트랜지션 값이 다시 돌아오지 않게 되는 문제로 이어졌습니다.

전개

  • 문제를 해결하기 위해 여러가지 방법을 사용해 보았습니다

  • 첫 번째로는, LayerMask와 Raycast를 사용해보았습니다.

    • 타일맵의 floor에 TileMap Collider 2D 컴포넌트를 달고 isTrigger를 달아 주었습니다.
    • Raycast를 사용해서 바닥과 플레이어가 닿아있는지 여부를 체크하고, 바닥과 닿아있다면 점프가 가능하도록 설정해주었습니다.
        bool isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundMask);
    
    • 이렇게 하면 플레이어가 계속 땅에 닿아있다는 신호가 올테니까 점프를 하고,
        if (isGrounded && isJumping)
        {
            _rigidbody.velocity = new Vector2(_rigidbody.velocity.x, jumpForce);
            isJumping = false;
        }
    • 이 코드로 수치를 변경하였으며, 점프의 상태를 false로 돌려서 점프 처리를 마무리 지었습니다.
  • 문제는 근본적인 문제였던 중력처리를 하지 못해 생겼었던 점프를 하면 그만큼 다시 내려오지 않는 문제가 생겼었습니다.

  • 어찌 되었건 중력의 처리를 필수적이라고 생각이 들게 되었습니다.


절정 & 결말

  • 문제를 해결하기 위해서 다시 처음부터 구조를 설계해봤습니다.

  • 점프를 할 때 무엇이 필요한지 고민을 해보았고, 인터넷의 도움을 받아서 스크립트에서 그냥 가짜 중력을 부여해줄 수 있다는 것을 알았습니다.

  • 그리고 화살이 날아가는 코드를 배웠었는데, 거기서 Time.fixedDeltaTime이 있었습니다.

  • 고정된 시간 간격으로 값을 업데이트 해주는 것을 알게 되었고, 이것을 활용해서 수치를 조절해주면 최고점에 도달하면서 속도가 느려지게 설정하고, 떨어질때 음수 값을 점점 더 더해주면서 낙하하게 만들 수 있다는 것을 깨닫게 되었습니다.

    • 이렇게 필요한 필드값들을 선언해주고,
    • 이렇게 코드를 작성해서 시간이 지날수록 초기값에서 계속 감소하는 JumpVelocity를 반영한 jumpHeight를 구했습니다.
    • FixedUpdate()문에 메서드를 작성할 것이기 때문에 일정간격으로 jumpHeight는 업데이트 됩니다.
    • 위치값을 적용해 주기 위해서 Vector값으로 jumpHeight를 전달해 주었습니다.
  • 이렇게 해서 무사히 탑다운 형식의 2D 게임에서 점프를 구현할 수 있었습니다.

profile
게임 개발, 기획

0개의 댓글