유니티 애니메이션 특정부분에서 함수 실행

2020. 7. 20. 12:51유니티실습

반응형

안녕하세요 유니티 비기너입니다.

이번 시간에는 애니메이션의 모션이 진행되는

특정 부분에서 함수를 실행하는 방법에 대해 알아보겠습니다.

 

테스트 화면

어느 앱이든 사용자가 보는 화면이 같다고 해도 내부 스크립트는 여러 방식으로 표현되기 때문에

테스트 화면으로는 차이점을 못 느끼실 겁니다.

 

공격 버튼을 클릭하게 되면 플레이어의 Attak 애니메이션이 호출되며 머리를 기울이는 시점에

적의 Damage 애니메이션이 호출됩니다.

 

수비 버튼의 경우 플레이어의 Defence 애니메이션이 호출되는 시점에 바로 적의 Attack 애니메이션이

호출되도록 설정되어있으며 설정 방식은 아래와 같습니다.

 

Animation AddEvent - 특정부분에서 함수 실행

플레이어의 Attack 애니메이션 스프라이트가 등록된 화면입니다.

 

Animation 창을 자세히 보시면 +아이콘 모양이 하나 보이며 마우스를 올리면  AddEvent라는 표시가 뜨게 됩니다.

 

해당 버튼을 클릭하게 되면 현재 선택되어있는 타임라인에 하얀색 직사각형이 표시됩니다.

 

Event를 선택하시면 다음과 같이 파란색으로 표시되며

인스펙터에 함수를 선택이 가능해집니다.

해당 함수들은 Player오브젝트가 포함하고 있는 GameController 스크립트의 함수들입니다.

 

위와 같이 등록하신다면 해당 애니메이션이 재생되고 이벤트가 설정되어있는 구간을 지나면

등록한 함수가 실행되게 됩니다.

 

스크립트 - GameController

public class GameController : MonoBehaviour
{
    public Animator enemyAnim;
    public Animator playerAnim;

    public void AttackButton() {
        playerAnim.SetTrigger("P_Attack");
    }

    public void DefenceButton() {
        playerAnim.SetTrigger("P_Defence");
    }

    public void PlayerHit() {
        enemyAnim.SetTrigger("E_Attack");
    }
    
    public void EnemyHit() {
        enemyAnim.SetTrigger("E_Damage");
    }
}

AttackButton()과, DefenceButton() 함수는 UI버튼에 의해서 호출되는 함수이며

PlayerHit(), EnemyHit() 플레이어 오브젝트의 애니메이션 타임라인 특정 구간에서 호출되는 함수입니다.

 

편의상 하나의 스크립트에 함수를 몰아서 테스트를 진행하였으며

타임라인을 이용하여 특정 포인트에 함수를 호출할 수 있다는 점을 확인하시면 됩니다.

 

ex) 테스트 화면처럼 때리는 모션이 진행되는 순간에 적의 체력이 감소, 맞는 모션 시작 등등

 

개선된 사항

해당 방식을 알기 전까진 공격 애니메이션을 실행하고 coroutine이나 deltatime을 이용하여

2초 후 적의 체력이 감소하는 특정시간이 경과시킨후에 작동하는 스크립트를 작성했었지만

 

위의 방식을 알게 된 이후로 원하는 시점에 함수를 실행시켜 애니메이션과 함수의 실행하는 부분이

매끄러워졌으며 스크립트가 간결하고 깔끔해졌습니다.

반응형