본문 바로가기
UNITY/PROJECT

Invoke() :: UnityEvent 또는 델리게이트에 등록된 메서드 실행하기.

by 램플릿 2024. 11. 11.

이벤트나 델리게이트는 여러 개의 메서드를 한 번에 호출할 수 있는 기능을 제공합니다. Invoke()는 이러한 이벤트나 델리게이트를 트리거(호출)하여, 등록된 모든 리스너 메서드들을 실행하는 역할을 합니다.

UnityEvent와 Invoke

Unity에서 UnityEvent는 특별히 Unity Inspector에서 설정할 수 있는 이벤트 시스템입니다. 이 시스템을 사용하면 C# 코드 내에서 이벤트를 선언하고, Unity 에디터에서 이벤트에 대한 리스너(메서드)를 등록하고 호출할 수 있습니다.

1. UnityEvent 선언 및 사용

using UnityEngine;
using UnityEngine.Events;

public class EventExample : MonoBehaviour
{
    // UnityEvent 선언
    public UnityEvent onEventTriggered;

    void Start()
    {
        // 이벤트에 메서드 추가
        if (onEventTriggered == null)
            onEventTriggered = new UnityEvent();
        
        onEventTriggered.AddListener(HandleEvent);
    }

    void HandleEvent()
    {
        Debug.Log("이벤트가 호출되었습니다!");
    }

    void Update()
    {
        // 스페이스바를 누르면 이벤트 호출
        if (Input.GetKeyDown(KeyCode.Space))
        {
            onEventTriggered.Invoke();  // 이벤트 호출
        }
    }
}

위 코드에서:

  • UnityEvent onEventTriggered는 UnityEvent 타입의 변수입니다.
  • onEventTriggered.AddListener(HandleEvent)는 이벤트가 호출될 때 HandleEvent() 메서드를 실행하도록 등록합니다.
  • onEventTriggered.Invoke()는 이벤트를 호출하는 코드로, 이벤트가 발생하면 등록된 메서드가 실행됩니다.

2. UnityEvent의 특징

  • UnityEvent는 Inspector 창에서 메서드를 쉽게 연결할 수 있게 해줍니다. 예를 들어, 버튼 클릭 이벤트, 다른 오브젝트의 이벤트 등을 쉽게 연결할 수 있습니다.
  • Invoke() 메서드는 이벤트를 트리거(호출)하는 데 사용됩니다. 이벤트에 연결된 메서드들은 모두 순차적으로 실행됩니다.

델리게이트(Delegate)와 Invoke

델리게이트는 C#의 기능으로, 메서드에 대한 참조를 변수로 저장하고 호출할 수 있는 기능을 제공합니다. Unity에서 델리게이트를 사용하여 이벤트를 처리할 수도 있습니다. 델리게이트를 사용할 때도 Invoke()를 통해 메서드를 호출합니다.

1. 델리게이트 선언 및 사용

using UnityEngine;
using System;

public class DelegateExample : MonoBehaviour
{
    // 델리게이트 선언
    public Action onEventTriggered;

    void Start()
    {
        // 델리게이트에 메서드 추가
        onEventTriggered += HandleEvent;
    }

    void HandleEvent()
    {
        Debug.Log("델리게이트 이벤트가 호출되었습니다!");
    }

    void Update()
    {
        // 스페이스바를 누르면 델리게이트 호출
        if (Input.GetKeyDown(KeyCode.Space))
        {
            onEventTriggered?.Invoke();  // 델리게이트 호출
        }
    }
}

위 코드에서:

  • Action은 반환값이 없고 매개변수가 없는 델리게이트 타입입니다. onEventTriggered 델리게이트에 HandleEvent 메서드를 추가한 후, Invoke()를 사용하여 델리게이트를 호출합니다.
  • 델리게이트가 호출되면 HandleEvent() 메서드가 실행됩니다.

Invoke()의 사용

Invoke() 메서드는 이벤트나 델리게이트에서 등록된 메서드를 호출하는 데 사용됩니다. 이를 통해 여러 개의 메서드를 한 번에 호출할 수 있습니다.

1. UnityEvent에서 Invoke 사용

UnityEvent에서 Invoke()는 이벤트가 발생했을 때 등록된 리스너들을 실행하는 역할을 합니다. 이벤트가 호출될 때마다, Invoke()는 등록된 모든 메서드를 실행합니다.

2. 델리게이트에서 Invoke 사용

델리게이트에서도 마찬가지로 Invoke()는 델리게이트에 등록된 메서드들을 호출합니다. 예를 들어, Action 델리게이트의 경우, Invoke()를 통해 등록된 메서드를 실행할 수 있습니다.

요약

  • UnityEvent에서 Invoke()는 등록된 모든 리스너 메서드를 호출하는 데 사용됩니다. 이벤트가 발생하면 Invoke()를 통해 연결된 메서드들이 실행됩니다.
  • 델리게이트에서 Invoke()는 등록된 메서드를 호출하는 기능을 합니다.
  • Invoke()는 이벤트나 델리게이트에서 메서드를 호출하는 트리거 역할을 합니다.

이렇게 Invoke()는 이벤트 시스템에서 메서드를 호출하는 중요한 기능을 제공하며, Unity에서 이벤트와 델리게이트를 다룰 때 자주 사용됩니다.