오브젝트가 이동을할때 정적으로 움직이면 뭔가 심심하고 재미가없다 떄문에 우리는 애니메이션을통해
오브젝트에 생명을 불어넣어 오브젝트가 살아있는것처럼 이동하게끔한다
우선 첫번째로 에니메이션 컨트롤러를 생성해주어야한다 우리는 애니메이션 컨트롤러에서
플레이어의 상태에 따른 애니메이션을 실행시키기위한 리모컨과같은 존재라고 보면된다
이제 애니메이션 컨트롤러를 만들면 해당화면이 보일것이다
유니티 애니메이션 커트롤러의 3가지 구성요소인 스테이트, 트렌지션 파리미터가 있는데우선 우리는
애니메이션의 상태에 해당하는 스테이트를 만들어볼것이다
다운받은 애니메이션 클립을 드래그 드롭하여 넣어줘도되고 우클립 [Creat State] -> [Empty] -> [Motion]에서 해당 클립을 넣어주는방식 둘중 편한 방식으로 애니메이션 클립을 넣어주면된다
기본적으로 주어지는 3가지 노드중
Entry노드는 애니메이션의 시작지점에 해당하는 노드이다
기본적으로 먼저넣은 노드에 연결되어있는데 이를 새로 지정하고싶다면 지정하고싶은 노드를 우클릭한 다음에
Set as Layer Defult State를 클릭해주면 새로운 시작지점이 설정된다
나머지 두노드도 설명을 덧붙이자면
any state노드는 애니메이션이 재생되고있어도 트랜지션의 애니메이션 변경 조건이 충족되면 충족된 애니메이션 스테이트로 넘어가게하는 노드이다 사실 이노드는 Has Exit Time을 통해 해결할 수 있을거같은데 왜존재하는지 잘모르겠다
마지막으로 Exit노드는 애니메이션이 끝났음을 의미하고, 이노드에 도달하면 Entry노드로 돌아간다
이제 우리는 애니메이션의 전환을 위해 트렌지션을 만들어야한다 애니메이션을 하나 우클릭한다음 Make Transition 을 클릭하면 연결시킬수있는 선이 생긴다 해당 선을 변경시킬 다른 애니메이션 노드에 연결하면된다
트렌지션을 연결시켰다면 이제 우측 상단에 보이는 파라미터를 클릭하고 + 버튼을 눌러 변수를 만들것이다
변수의 종류에는 Float, int, Bool, Trigger 이렇게 4가지가있는데
Bool 형 변수를 하나 생성한다음 이름은 isRun으로 만들겠다
이제 Idle 에서 Run 으로가는 트렌지션을 하나 클릭한다음에 Conditions 항목에 있는 + 버튼을 누르고 우리가 만든 isRun 변수를 만든후 [idle] -> [Run]으로갈때는 true로 [Run] -> [idle] 로갈때는 false로 설정해주면된다
이제 모델에 Animator컴포넌트를 추가해둔다음에 Controller 항목에 우리만든 애니메이션컨트롤러를 추가해주면된다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float PlayerSpeed;
public Animator PlayerAni;
// Update is called once per frame
void Update()
{
float XMove = Input.GetAxis("Horizontal");
float ZMove = Input.GetAxis("Vertical");
Vector2 movevec = new Vector2(ZMove, XMove);
if (movevec != new Vector2(0, 0))
{
PlayerAni.SetBool("isRun", true);
}
else
{
PlayerAni.SetBool("isRun", false);
}
gameObject.transform.position += new Vector3(XMove * PlayerSpeed, 0, ZMove * PlayerSpeed)*Time.deltaTime;
}
}
플레이어가 움직일 때 우리가 만든 파라미터의 상태를 변화시킴으로써 트렌지션에서 파라미터 상태에 맞게
SetBool("Boolg형파라미터 이름",bool)매소드를 통해 우리는 파라이터의 변수의 값을 변화시킬 수 있고 이를 통해 애니메이터의 트렌지션을 통해 애니메이션들이 변화하여 상황에 맞는 애니메이션을 만들 수 있다
하지만 애니메이션이 트렌지션의 조건이 충족되어도 애니메이션이 변화하지않을떄가 있는데 이는 트렌지션에 있는
Has Exit Time 이라는 옵션을 비활성화 해주어야한다 이옵션은 종료시섬을 활성화 하는 옵션인데 비활성화 해줌으로 써 전이 조건이 만족되면 바로 전이가 된다고한다.
'Engine > Unity 그때그때 끄적끄적' 카테고리의 다른 글
[Unity] 네비게이션 (0) | 2021.07.23 |
---|---|
[Unity] 화면 전환 (0) | 2021.07.14 |
[Unity] 싱글톤 패턴 (0) | 2021.07.13 |
[Unity] CSV파일 읽고 사용하기 (0) | 2021.07.11 |
[Unity] Sprite Atlas 활용하기 (0) | 2021.07.08 |