Animations
좌측Scene에서Player를 클릭하고 상단의Windows - Animation - Animation을 클릭하면 애니메이션 설정 화면이 나타난다.
Image Name - Create New Clip을 클릭하여 새로운 애니메이션을 만들어 준다.
새로운 이름은 Player Jump로 한다.
점프에 해당하는 이미지들을 선택하여 드래그 앤 드롭한 뒤 Samples를 수정하여 속도를 조절한다.
Player Land도 만들어 준다.
Animator
좌측Scene에서Player를 클릭하고 상단의Windows - Animations - Animator를 클릭하면 차트가 나타난다.

Player Run을 우클릭한 뒤 Make Transition을 클릭하여 Player Jump와 이어준다.
마찬가지로 Player Jump를 우클릭한 뒤 Make Transition을 클릭하여 Player Land와 이어준다.
마지막으로 같은 과정으로 Player Run과 이어준다.
그렇게 되면 Player Run, Player Jump, Player Land 이미지가 계속해서 이어지게 되는데 원하는 상황에 원하는 애니메이션이 나오게 해야 한다.
그러기 위해서는 연결 선을 클릭한 뒤 우측의 Has Exit Time 체크를 해제한다.
Has Exit Time은 애니메이션이 끝나면 다음 애니메이션이 실행 되는 기능을 한다.
Player Land가 종료된 뒤에 Player Run이 이어져야 하므로 그 부분은 체크 상태를 유지한다.
Player Run - Player Jump 연결 선을 클릭한 뒤 우측의 Settings를 펼치고 Fixed Duration을 0으로, Transition Duration (%)을 0으로 설정한다.
애니메이션 간에 전환이 일어나지 않게 하기 위해서라고 한다.
Transitions Settings
Transition Duration (%)애니메이션이 지정 %가 진행되었을 때 다음 애니메이션이 진행되도록 한다.
Has Exit Time을 체크 해제했기 때문에 직접 애니메이션이 작동될 조건을 설정해주어야 한다.
상단의 Parameters를 클릭하고 + 버튼을 눌러 Int를 선택한 뒤 이름을 State로 한다.
Player Run - Player Jump 연결 선을 클릭한 뒤 우측의 Conditions의 +를 눌러 조건을 추가해준다.
State = 1일 때 Player Run에서 Player Jump로 가게 하기 위해 차례대로 State, Equals, 1로 설정한다.
Player Jump - Player Land도 마찬가지로 State = 2일 때 넘어가도록 설정한다.
Loop Time
애니메이션이 반복되지 않게 하기 위해Loop Time을 체크 해제한다.
이 상태로 두면 점프 한 번에 애니메이션이 두 번 나올 수도 있다.
Assets - Animations 폴더로 이동해서 Player Jump와 Player Land를 클릭한 뒤 우측의 Loop Time의 체크를 해제한다.
애니메이션을 제어하기 위해 Script에 Animator를 연결시켜야 한다.
public Animator playerAnimator; // add
Script를 저장하고 Player의 Animator Component를 드래그하여 Player Animator 항목에 드롭한다.
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
playerRigidBody.AddForceY(jumpForce, ForceMode2D.Impulse);
isGrounded = false;
playerAnimator.SetInteger("state", 1); // add
}
}
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.name == "Platform")
{
isGrounded = true;
playerAnimator.SetInteger("state", 2); // add
}
}
Int 타입의 state 변수를 만들었기 때문에 SetInteger 함수를 이용하여 State의 값을 1 또는 2로 수정해 준다.
그런데 여기서 게임이 시작된 직후 Player가 Platform과 충돌한 상태로 시작하기 때문에 수정이 필요하다.
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.name == "Platform")
{
if (!isGrounded) // add
{
playerAnimator.SetInteger("state", 2);
}
isGrounded = true;
}
}
점프 후에만 Player Land 애니메이션이 작동하도록 바뀌었다.
Edit - Project Settings의Time Scale을 변경하면 게임 자체의 속도를 조절 할 수 있다.