본문 바로가기
App && Game

[유니티] 다른 애니메이션(animation) 연결하기 / 애니메이션 상태변환 / 애니메이션 바로 변경(즉각 변경) / 특정 조건 때 애니메이션

by 배애앰이 좋아 2022. 2. 12.
반응형

애니메이션(animation)을 만드는 방법은 옛날에 작성 아래 글을 참고해주시면 감사합니다.

https://88-it.tistory.com/142

 

[유니티] 애니메이션(animation) 만들기

유니티 애니메이션 만들기 전 필요한 것 : 애니메이션 만들 그림 - 아래 그림과 같이 순차적으로 움직임을 나타낼 수 있는 연속적인 그림이 필요합니다. 과정 1. 애니메이션을 만들고자 하는 그

88-it.tistory.com

 

오늘은 만든 애니메이션을 연결하는 작업을 소개해드리고자 합니다. 특히나 플레이어 같은 캐릭터를 만드면 여러 애니메이션의 연결이 꼭 필요합니다. 일단 연결할 애니메이션을 만들어 줍니다.

 

 

위의 사진에서 run, wait에 대한 애니메이션은 이미 연결되어있지만 jump가 연결되어있지 않을 것을 볼 수 있습니다. 한번 jump를 연결해보겠습니다. 

 

 

1. 삼각형 모양의 애니메이션으로 화면(animator)으로 끌어다놓습니다. 

 

 

2. 연결하고자 하는 애니메이션을 마우스 오른쪽 키를 누르면 위와 같이 뜹니다. 여기서 Make Transition 을 눌려서 아까 갖다놓은 jump 애니메이션을 눌려 선을 연결해줍니다.

 

 

3. 그 다음에 이 jump 애니메이션은 언제 실행할지에 대한 조건을 설정해주고자 합니다. 위에 Parameters 를 누르고 +키를 누릅니다. 아래 총 4가지 조건형이 뜨는데 저 같은 경우 스페이스 키를 눌렸을 때 실행하기 위해 Bool 을 통해 Ture/False로 관리하겠습니다.

 

 

4. 이름까지 설정하면 왼쪽 상단처럼 조건이 만들어 진 것을 볼 수 있습니다. 그 후에 아까 wait 와 jump 사이에 생성한 화살표를 눌려주면 오른쪽 화면 처럼 뜨는데 그 중에 conditions의 +키를 눌려주세요.

 

 

5. 아까 만든 조건식을 넣어주세요. 저 같은 경우 스페이스 키가 눌릴 때 점프 모션을 넣고 싶기 때문에 true 일 경우 바꿀 수 있도록 하였습니다. 

 

 

6. 여기서 끝이 아니라 반대 경우 jump -> wait 상태 변환도 설정해줍니다(저 경우 조건을 따로 만들지 않고 false 일 경우 설정) 여기까지 끝났다면 이제 스크립트에서 설정해주어야 합니다.

 

 

+ 추가 팁 : 동작이 바로 바뀌기 바란다면 위의 인스펙터에서 Has Exit Time을 활성화 할 경우 해당 동작을 끝내고 다음 동작으로 이동하게 되고 비활성화 할 경우 즉시 동작을 전환으로 바꿀 수 있습니다.

 

7. 스크립트 설정

 

public Animator anim;
anim = GetComponent<Animator>();
anim.SetBool("SpaceButtonDown", true);

 

간단히 코드는 anim.SetBool("내가 만든 조건 이름", true) 를 통해 상태를 조정할 수 있습니다.

이때 자신의 선택한 형( 예 : Float(SetFloat) 등)을 구분해서 설정해야합니다.

 

- 아래 일부 코드 

public Animator anim;

void Awake()
{
        anim = GetComponent<Animator>();
}

private void Update() 
{
	if (Input.GetButtonDown("Jump")) //점프 키가 눌렸을 때
	{
		anim.SetBool("SpaceButtonDown", true);
        if (jumpcount < 2) //점프 중이지 않을 때 isjumping == false
        {
        	rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse); //위쪽으로 힘을 준다.
        	jumpcount++;
        }
	}
}
        
private void OnCollisionEnter2D(Collision2D collision)
{
	if (collision.gameObject.CompareTag("ground"))
	{
		anim.SetBool("SpaceButtonDown", false);
		jumpcount = 0;
	}
}

 

저 같은 경우 위 코드처럼 스페이스 바를 누를 때 jump 애니메이션 활성화를 하고 땅에 착지하면 비활성화했습니다.

 

결과 :

 

 

보시다싶이 스페이스 키를 눌렸을 때 점프동작이 바로 잘 들어가고 다시 땅에 닿였을 때 wait 자세로 넘어가는 것을 확인할 수 있습니다.

 

여기까지 읽어주셔서 감사합니다.

반응형

댓글