[ 개발 일기 ] 반환형을 가지는 Delegate에 대해서 in Unity

2024. 7. 18. 16:00게임 개발/개발 일기

C# Unity에서 개발을 하던 도중 float을 반환하는 Delegate를 만들었는데 event를 사용해

Delegate에 여러 메서드를 추가하면 리턴하는 값은 무엇인지에 대해서 궁금해서 한 번 테스트해보았다.

 

public delegate float CalcNum(int a);

public class DelegateTest : MonoBehaviour
{
    
    public event CalcNum OnCalcNumEvent;

    private void Awake()
    {

        OnCalcNumEvent += HandlePlusB;
        OnCalcNumEvent += HandlePlusA;

    }


    private void Update()
    {
        
        if(Input.GetKeyDown(KeyCode.Space))
        {

            Debug.Log(OnCalcNumEvent?.Invoke(1));

        }

    }

    private float HandlePlusA(int a)
    {

        return a + 10f;

    }

    private float HandlePlusB(int a)
    {
        return a + 20f;
    }

}

이러한 형식으로 했을 경우

맨 마지막으로 추가한 메서드의 반환값이 리턴된다.

 

Awake를 보면 HandlePlusA를 제일 마지막에 넣어주니 반환값은 11이 된다.

 

만약 여기서 이벤트 등록한 모든 메서드의 반환값을 알고 싶다면

Update 안에 if 문 안에다가 이 코드를 넣어주면 된다.

foreach(CalcNum a in OnCalcNumEvent.GetInvocationList())
{

    Debug.Log(a.Invoke(1));

}

 

그렇게 하면 B가 먼저 나오고 A가 나오게 된다.