목표
- event 키워드에 해새 알아보자
event
delegate는 다른 method를 대신 실행해주기 위해 사용된다.
event는 자신에게 등록된 delegate를 실행하는데 사용할 수 있다.
1개의 event에, n개의 delegate를 등록하며, event가 호출(Invoke)된다면, 등록된 delegate를 모두 호출한다.
event 등록에는 +, 해제에는 -를 사용한다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 리턴형이 void이고, 파라미터가 string인 델리게이트를 선언한다.
public delegate void MyDelegate(string action);
// 사용자가 어떤 입력을 하기 위해 생성한 클래스
public static class ActionEventHandler
{
// MyDelegate 타입의 델리케이트를 저장하는 event를 선언한다.
public static event MyDelegate EventAction;
// 어떤 입력을 실행한다.
public static void CallAction(string action)
{
// 그 동작에 의해 Event가 호출되면, event에 등록된 delegate가 실행된다.
EventAction?.Invoke(action);
}
}
// 여기서는 이벤트의 구독 여부를 결정한다.
public class EventPublisher
{
// string을 입력 받으면, 해당 값을 출력하는 델리게이트를 정의한다.
private MyDelegate myDelegate = (action) =>
{
Debug.Log("this is : " + action);
};
// 이벤트를 등록한다.
public void RegisterEvent()
{
ActionEventHandler.EventAction += myDelegate;
}
// 이벤트를 해제한따.
public void UnregisterEvent()
{
ActionEventHandler.EventAction -= myDelegate;
}
}
public class SampleSacript : MonoBehaviour
{
public void Start()
{
// EventPublisher 안에는 무명 함수와 연결된 delegate가 준비되어 있다.
EventPublisher publisher = new EventPublisher();
// 무명 함수와 연결된 delegate를 event와 연결시킨다.
publisher.RegisterEvent();
// CallAction 함수의 실행으로 인해 event가 호출되면서, event에 연결된 delegate 들이 호출될 것이다.
ActionEventHandler.CallAction("Start");
// event에 등록된 delegate를 해제한다.
publisher.UnregisterEvent();
// 동일하게 event를 호출했지만, 등록된 delegate가 없어서 호출 결과가 없을 것이다.
ActionEventHandler.CallAction("Stop");
}
}
'프로그래밍 > Unity C#' 카테고리의 다른 글
[Unity] Tutorial 06 - Intermediate Scripting (LINQ) (0) | 2020.05.28 |
---|---|
[Unity] Tutorial 06 - Intermediate Scripting (Attributes) (0) | 2020.05.27 |
[Unity] Tutorial 06 - Intermediate Scripting (Delegates) (0) | 2020.05.27 |
[Unity] Tutorial 06 - Intermediate Scripting (Quaternions) (0) | 2020.05.27 |
[Unity] Tutorial 06 - Intermediate Scripting (Coroutines) (0) | 2020.05.27 |