유니티에는 델리게이트를 미리 구현해놓은 방법으로 쓸수있다.
Action 과 Func 이 존재하는데 사용을 하기 위해 using System을 입력 후 사용이 가능하다.
이둘의 차이점은 Func함수는 반환값이 있는 익명 함수고
Action함수는 반환값이 없는 익명 함수입니다. Func함수의 마지막은 반환값의 자료형입니다.
namespace System
{
public delegate void Action();
}
Action은 이런식으로 미리 델리게이트가 구현 되어있다.
사용법은 델리게이트를 쓰듯이 사용을 하면 된다.
장점으로는 델리게이트가 많아지면 Action등으로 대체를 하면 가독성이 올라가는 장점이 있다.
public Action testDelChain;
public void Progress(Action testAction)
{
testAction();
}
public void FuncOne()
{
Debug.Log("테스트원");
}
public void FuncTwo()
{
Debug.Log("테스트투");
}
void Start()
{
testAction += FuncOne;
testAction += FuncTwo;
Progress(testAction);
testAction -= FuncOne;
Progress(testAction);
}
namespace System
{
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
}
Func은 이렇게 구현이 되어있다. Func은 변수를 적고 마지막에 리턴을 어떤거로 할지 적어두는 식으로 사용할 수 있다.
Func<int, int, string> myDelegate; // string 이 리턴 타입
void Start()
{
myDelegate = (int a, int b) => { int sum = a + b ; return sum + " 이 리턴 되었습니다."; };
print(myDelegate(3, 5));
}
람다식을 사용해 myDelegate를 리턴시켜준다. 이때 String 타입으로 리턴을 시켜줘야하므로 마지막 return에는 꼭 string을 붙여준다.