게임 개발/개발 일기
[ 개발 일기 ] 반환형을 가지는 Delegate에 대해서 in Unity
ksan09
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가 나오게 된다.