[점펠로프] 점프 애니메이션 적용하기

Yerin·2022년 3월 26일
0

게임 제작 스터디

목록 보기
1/3

이번에 게임개발 스터디에서 간단한 줄넘기 게임을 개발하게 되었습니다.

이번 포스팅에서는 버튼을 눌러 점프를 할 때 캐릭터들의 모션이 바뀌는 애니메이션을 적용하는 방법을 다뤄보겠습니다.

점프하는 모습이 담긴 이미지를 준비합니다.
저는 그래픽팀이 준비해 준 이미지를 사용했습니다.

애니메이션에 적용하고 싶은 이미지들을 한번에 선택하여 적용하고 싶은 오브젝트에 끌어다 놓아줍니다.

끌어다놓은 후 애니메이션의 이름을 정해준 뒤 저장을 눌러줍니다.
저장을 하면 애니메이션 컨트롤러와 애니메이션 클립이 생성됩니다.

점프 모션은 버튼을 눌렀을 때 한 번만 작용하기 때문에 Loop Time를 체크 해제시켜줍니다.

이제 애니메이션 컨트롤러를 눌러줍니다. 그러면 아래와 같이 창이 뜨게 됩니다.

점프를 하고 다시 돌아왔을 때 원래의 모습으로 돌아오기 위해 가만히 서있는 동작도 애니메이션으로 만들어 Idle이라는 이름으로 미리 만들어주었습니다.
방법은 앞과 같습니다.

이제 가만히 있다가 점프를 할때 모션을 하는 걸로 바꿔주어야합니다.


Idle 스테이트를 우클릭하여 make Transition을 클릭한 후 점프 stage3_Jump 스테이트와 이어줍니다. 반대도 마찬가지입니다.

점프여부를 파악하기 위해서는 bool 변수가 필요합니다.
상단 Window - Animation - Animator Parameter를 클릭하여 isJumping이라는
bool변수를 추가합니다.

이제 각각의 스테이트를 눌러 설정을 해야합니다.

먼저 Settings칸의 겹치는 부분을 위 사진처럼 모두 없애줍니다.
우리는 가만히 있을 때 점프를 하면 점프 애니메이션이 재생되어야합니다.
가만히 있는 동작인 Idle에서 isJumping이 true가 될 때 즉, 점프를 했을 때
Jump 스테이트로 이동하도록 설정했습니다.


반대의 경우에는 isJumping이 false가 됐을 때, 즉, 점프가 끝났을 때 다시 정지 동작으로 이동하도록 설정합니다.

이제 점프 스크립트를 수정합니다.

public class ButtonJump : MonoBehaviour
{	
	public float jumpPower;
    Rigidbody2D rigid;
    bool jump = false;
    Animator anim;
    
     void Awake()
    {
        anim = GetComponent<Animator>();
        rigid = GetComponent<Rigidbody2D>();
    }
       public void JUMP_J()
    {	
   		 //점프했을 때 
        if (jump && !anim.GetBool("isJumping"))
        {       
           rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
		   anim.SetBool("isJumping", true);
        }
        
    }

    private void FixedUpdate()
    {
        //Landing Platform
        if (rigid.velocity.y < 0) {
            Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
            RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1);
            if (rayHit.collider != null)
            {
                if (rayHit.distance < 0.5f)
                {
                    anim.SetBool("isJumping", false);
                }
            }
        }  
    }
}

점프 했을 때 isJumping 변수 값을 true로 설정

anim.SetBool("isJumping", true);

바닥에 hit을 쏴서 바닥과 맞닿는 순간 isJumping 변수 값을 false로 설정

private void FixedUpdate()
   {
       //Landing Platform
       if (rigid.velocity.y < 0) {
           Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
           RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1);
           if (rayHit.collider != null)
           {
               if (rayHit.distance < 0.5f)
               {
                   anim.SetBool("isJumping", false);
               }
           }
       }  
   }

완성!

profile
재밌는 코딩 공부

0개의 댓글