유니티 Invoke를 활용한 시간 지연

2020. 11. 3. 16:15유니티실습

반응형
728x170

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

이번 시간에는 Invoke에 대해서 알아보겠습니다.

 

Invoke

초단위 시간을 경과시킨 후에 함수를 실행합니다.
ex ) Invoke ("함수명", 지연시킬 초);

Invoke의 간단한 사용 예를 들자면 주인공이 몬스터를 제압하여 쓰러지는 가정을 할 때
쓰러지는 모습과 동시에 사라진다면 굉장히 부자연스러워지게 됩니다.

그러한 부분을 처리하기 위해 일정 시간을 딜레이 시킨 후에 함수를 실행시켜
천천히 사라지게 하는 방법이 가능합니다.

실행화면

공격 아이콘을 누르면 비활성화되어있는 이펙트가 나타나고 잠시 후 다시 비활성화됩니다.

스킬 아이콘을 누르면 운석이 떨어져 적을 가격하고 쓰러진 적은 잠시 후 비활성화됩니다.

2가지 아이콘 모두 Invoke를 활용하여 오브젝트를 몇 초 후에 비활성화시키는 화면입니다.

스크립트 Player

public class PlayerManager : MonoBehaviour
{
    public GameObject attackEffect, skillEffect;

    public void Attack() {
        attackEffect.SetActive(true);
        Invoke("HideEffect", 1f);
    }

    private void HideEffect() {
        attackEffect.SetActive(false);
    }

    public void Skill() {
        skillEffect.SetActive(true);
    }
}

 

칼모양 아이콘을 클릭하면 Attack() 함수가 실행되며 Invoke를 사용하여 1초 후에 HideEffect() 함수가 실행됩니다.

 

스크립트 Monster

public class MonsterManager : MonoBehaviour
{
    public Animator anim;

    private void Die(){
        anim.SetTrigger("Die");
        Invoke("Hide", 1.25f);
    }

    private void Hide() {
        gameObject.SetActive(false);
    }

    private void OnCollisionEnter2D(Collision2D col) {
        if(col.gameObject.tag == "Meteor") {
            Die();
            Destroy(col.gameObject);
        }
    }
}

운석 아이콘을 클릭하면 운석이 나타나 몬스터와 충돌하면서 OnCollisionEnter2D에 의해
Die()함수를 호출하고 1.25 초 후에 몬스터는 비활성화됩니다.

 

위의 예제는 해당 함수를 이해하기 위해 간단하게 활용한 방식이며

좀 더 다양한 방식으로 응용하여 사용가능합니다.

반응형
그리드형