[Unity] 2D 환경에서 점프 구현 (y축 이동이 구현되어 있을 때)

2025. 3. 17. 08:19·Unity

오늘은 점프를 구현해봤다. 평범한 2D 사이드 뷰 환경에서 점프를 하는 것은 문제가 없지만 Y축이 구현 되어 있을 때에는 문제가 된다. 왜냐하면 점프도 Y축 이동인데 이동을 Y축으로 할 수 있으니 RigidBody를 사용하는 것의 중력을 활용하는 것은 불가능 하다(방법이 있긴함) 따라서 구현 방식을 좀 다르게 접근 할 필요가 있다.

 

로직

 

이런 식으로 실제 이동하는 플레이어는 그대로 바닥에 있는 대신 Visual 부분만(body Collider도 같이) 띄워서 점프 한 것 처럼 구현 하면 된다. 만약 카메라가 문제라면 카메라의 Follow위치를 Visual이나 Visual의 자식으로 해주면 된다.

 

구현 방법

생각보다 간단하다. 원래는 코루틴을 써서 하려고 했는데 중간에 Easing 함수를 넣어야 할 것 같아서 가독성 이슈로 그냥 DoTween을 사용했다.

public void Jump(Vector2 force,  Ease jumpEase = Ease.Linear, Ease fallEase = Ease.Linear, 
    Action jumpEndEvent = null, Action endEvent = null)
{
    JumpNow = true;
    Vector2 originPos = _entity.transform.position;
    Transform target = _entity.VisualTrm;
    _moveYTween.Kill();
    
    _moveYTween = target.DOMoveY((originPos + force).y,
            1).SetEase(jumpEase)
        .OnComplete(() =>
        {
            jumpEndEvent?.Invoke();
            ReturnPos(-force, fallEase, endEvent);
        });
}

private void ReturnPos(Vector2 force, Ease ease = Ease.Linear, Action endEvent = null)
{
    Transform target = _entity.VisualTrm;
    Vector2 originPos = target.transform.position;
    _moveYTween.Kill();
    
    _moveYTween = target.DOMoveY((originPos + force).y,
            1).SetEase(ease)
        .OnComplete(() =>
        {
            endEvent?.Invoke();
            JumpNow = false;
        });
}

첫번째는 Visual 자체의 위치에서 Force 만큼 더해줘서 위로 띄워준다. 그 다음 Tween이 끝났다며 원래 위치로 이동하기 위해서 entity(실제 플레이어의 위치)로 이동시킨다. 그러면 완성! 생각보다 간단하다. 시간은 1초로 고정이다. 현재 중력의 힘이 강화 되지 않는 이상 Lerp 계산상 1초가 가장 자연스럽다.

 

Jump 도중에 이동?

Jump 도중에 이동으로는 보통 X축 이동만을 선택하나. Y축 이동은 움직임이 자연스럽지 않은 부분이 있기 때문이다, Y축은 이동은 어떻게 해야 할까 여러가지로 고민해본 결과 그냥 Y축 이동을 막는 것이 좋다. 다른 게임으로 예시를 들어보겠다. 캐슬 크래서 유명한 2D 벨트 스크롤 게임이다. 이 게임도 내가 만든 것과 비슷한데.

잘 보면 바닥의 그림자가 있고 게임 플레이 영상을 보다 보면 점프 할때 X축 이동만 구현 되어있는 것을 확인 할 수 있다. Y축 이동을 하면 그만큼 연산을 해주면 되긴 하는데 보통은 좀 이상한 감이 있어서 Y축 이동은 구현이 잘 안되어 있는 것으로 알고 있다. 

 

'Unity' 카테고리의 다른 글

[졸업작품, Unity] 아이작 방 생성 알고리즘 구현  (0) 2025.04.03
[Unity]UniTask란?  (0) 2025.03.31
[졸업작품, Unity] ItemSystem 구조 수정  (0) 2025.03.14
[졸업작품, Unity]Assembly definition를 사용하는 방법  (0) 2025.03.12
[졸업작품, Unity]아이템 시스템 수정  (0) 2025.03.09
'Unity' 카테고리의 다른 글
  • [졸업작품, Unity] 아이작 방 생성 알고리즘 구현
  • [Unity]UniTask란?
  • [졸업작품, Unity] ItemSystem 구조 수정
  • [졸업작품, Unity]Assembly definition를 사용하는 방법
HK1206
HK1206
고3의 게임 개발자의 개발 일지
  • HK1206
    LJS의 게임 개발 일지
    HK1206
  • 전체
    오늘
    어제
    • 분류 전체보기 (24) N
      • Unity (19) N
      • Shader (1)
      • Editor (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
HK1206
[Unity] 2D 환경에서 점프 구현 (y축 이동이 구현되어 있을 때)
상단으로

티스토리툴바