Event란..?

특수한 형태의 delegate인 event는 클래스 내부에서 일종의 필드와 같이 정의된다.

클래스 내부에서 이벤트가 발생했음을 외부 이벤트 가입자에게 알려주는 역할이다.

외부 이벤트 가입자는 이벤트가 발생했을 경우 어떤 명령을 실행하는지 이벤트 핸들러를 작성해야 한다.

이벤트 핸들러를 이벤트에 등록하거나 삭제하여 이벤트가 발생하였을 경우 이벤트핸드러가 동작하게 된다.

using UnityEngine;
using System;

class MyButton
{
    public event EventHandler Click;

    public void ButtonDown()
    {
        if (this.Click != null)
        {
            Click(this, EventArgs.Empty);
        }
    }
}

public class MyEvent : MonoBehaviour
{
    private void Start()
    {
        MyButton button = new MyButton();

        button.Click += new EventHandler(Tooltip);
        button.Click += new EventHandler(TextPrint);
        
        button.ButtonDown();
        button.ButtonDown();
        button.ButtonDown();
    }

    void Tooltip(object sender, EventArgs e)
    {
        Debug.Log("툴팁 오픈");
    }

    void TextPrint(object sender, EventArgs e)
    {
        Debug.Log("텍스트 출력");
    }
}

위 처럼 사용하는 방식이며 버튼을 예시로 만든 예제이다.

using System;

public class MyButton
{
    public event EventHandler Click;

    public void ButtonDown()
    {
        if (this.Click != null)
        {
            Click(this, EventArgs.Empty);
        }
    }
}

---

using System;
using UnityEngine;

public class MyEvent : MonoBehaviour
{
    void Start()
    {
        MyButton button = new MyButton();
        button.Click += new EventHandler(TestEvent);
        
        button.ButtonDown();
    }

    void TestEvent(object sender, EventArgs e)
    {
        Debug.Log("print");
    }
}

당연한 예시이지만 다른 스크립트에서 위 처럼 사용이 가능하다.

따라서 유니티 버튼도 유니티 자체 이벤트 시스템을 통해 동작함을 알 수 있다.

태그: ,

카테고리:

업데이트:

댓글남기기