점프에 사용되는 스프라이트 이미지가 따로 나뉘어있어, 애니메이터를 생성할 수 없었다.
코드를 통해 스프라이트 이미지를 바꿔도 애니메이션 재생으로 스프라이트 이미지가 바뀌지 않는 것처럼 보이는 현상이 발생했다.
그래서 점프와 낙하중에는 애니메이터를 꺼버리고, 스프라이트 이미지를 교체하는 식으로 애니메이션을 만들었다.
스크립트
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 |