Player의 고정된 상태를 Default로 설정

(파트 03에서는 아래로 움직이는 모션이 Default였음)

Player Animation - Create New Clip: IdleDown(Left/Right), IdleUp(Left/Right), IdleLeft, IdleRight

새롭게 만든 애니메이션 8개에 각각 TopDownCharacter의 첫 번째 이미지만 추가

Animator

8개 애니메이션 줄기 삭제

우클릭 - Create State - From New Blend Tree: Player_Idle

[Parameters]

Float Parameter 추가: lastMoveX/Y

스크린샷 2023-08-03 155337.png

[Inspector]

Blend Type: 2D Simple Directional

Parameters: lastMoveX, lastMoveY

스크린샷 2023-08-03 160320.png

[Transition. Player_Idle to Player_Move]

Animator - Player_Idle 우클릭 - Set as Layer Default State

Make Transition - Player_Move 연결

스크린샷 2023-08-03 161015.png

(* 화살표 3개: Multiple Transition을 의미, Transition 총 4개)

스크린샷 2023-08-03 164424.png

[Transition. Player_Move to Player_Idle]

Player_Move 우클릭 - Make Transition: Player_Idle 클릭

Has Exit Time: 해제

fixed Duration: 해제

Transition Duration: 0

Conditions (+)

MoveX - Greater - 0.1

MoveX - Less - -0.1

MoveY - Greater - 0.1

MoveY - Less - -0.1

스크린샷 2023-08-03 165442.png

Update() 함수 수정

public class PlayerController : MonoBehaviour
{
    ...

    void Start() {...}

    void Update()
    {
        myRB.velocity = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")) * speed * Time.deltaTime;

        // Animator 파라미터 값이 실수형임
        myAnim.SetFloat("MoveX", myRB.velocity.x);
        myAnim.SetFloat("MoveY", myRB.velocity.y);

        // 정지 시 Player가 바라보는 방향이 Player의 마지막 이동방향으로 설정
        if (Input.GetAxisRaw("Horizontal") == 1 || Input.GetAxisRaw("Horizontal") == -1 || Input.GetAxisRaw("Vertical") == 1 || Input.GetAxisRaw("Vertical") == -1)
        {
            myAnim.SetFloat("lastMoveX", Input.GetAxisRaw("Horizontal"));
            myAnim.SetFloat("lastMoveY", Input.GetAxisRaw("Vertical"));
        }
    }
}

캐릭터 이동 시 애니메이션 적용이 안됨

게임 플레이 시 애니메이터의 파라미터 값의 변경이 되지 않음

(참고 영상에선 플레이어의 애니메이션이 적용되며 파라미터값이 실시간으로 바뀌는 걸 확인)

스크립트 수정 후 플레이어의 마지막 상태가 플레이어의 마지막 이동방향을 바라보는 상태는 적용

Player_Move 애니메이션이 게임 플레이 시 Player에 적용되지 않음

Sol) MoveX, MoveY 단순한 스펠링 실수