본문 바로가기

유니티 2D 기본(Platformer Game)

더블점프 구현

점프에 사용되는 스프라이트 이미지가 따로 나뉘어있어, 애니메이터를 생성할 수 없었다.

코드를 통해 스프라이트 이미지를 바꿔도 애니메이션 재생으로 스프라이트 이미지가 바뀌지 않는 것처럼 보이는 현상이 발생했다.

그래서 점프와 낙하중에는 애니메이터를 꺼버리고, 스프라이트 이미지를 교체하는 식으로 애니메이션을 만들었다.

 

스크립트

    Rigidbody2D rigid;
    Animator animator;
    SpriteRenderer spriteRenderer;
    bool isJumping;
    bool isDoubleJumping;
    
    void jump()
    {
        if (Input.GetButtonDown("Jump") && !isDoubleJumping)
        {
            if (isJumping) //더블점프
            {
                isDoubleJumping = true;
                animator.enabled = true;
                animator.SetTrigger("DoubleJump");
            }
            else //원점프
            {
                animator.enabled = false;
                isJumping = true;
                spriteRenderer.sprite = jumpSprite;

            }
            //연속 AddForce로 인한 슈퍼점프 방지
            if (rigid.velocity.y < 0) rigid.AddForce(Vector2.up * (jumpPower * 3f), ForceMode2D.Impulse);//낙하 중 더블점프는 점프파워 3배 주기
            else rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
            gm.soundPlay("점프");
        }
    }

더블점프를 했을 때, 연속된 AddForce로 가속도가 증가해 슈퍼점프가 되는 것을 방지했다.

또한 Gravity Scale이 3인 것과 낙하 중 velocity가 음수인 것을 고려해, 원 점프 후 낙하 시 더블점프를 사용했을 때 세배의 jumpPower을 주도록 했다.

 

결과

 

'유니티 2D 기본(Platformer Game)' 카테고리의 다른 글

10. 사운드 출력  (0) 2021.12.04
9. 스테이지 추가 & UI  (0) 2021.12.04
8. 아이템 먹기  (0) 2021.12.03
7. 몬스터 밟아서 잡기  (0) 2021.12.03
6. 플레이어 피격 이벤트 구현  (0) 2021.11.30