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
[Inspector]
Blend Type: 2D Simple Directional
Parameters: lastMoveX, lastMoveY
[Transition. Player_Idle to Player_Move]
Animator - Player_Idle 우클릭 - Set as Layer Default State
Make Transition - Player_Move 연결
(* 화살표 3개: Multiple Transition을 의미, Transition 총 4개)
[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
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 단순한 스펠링 실수