Programing/Unity(C#)

[C#] Action Invoke로 인자 전달하기

hye3193 2024. 3. 18. 19:56
public class Class1 : MonoBehaviour
{
    Action action;
    
    private void Trigger()
    {
        action.Invoke();
    }
}

public class Class2 : MonoBehaviour
{
    private void Start()
    {
        action += {Class1 Component}.ActionFunc
    }

    public void ActionFunc()
    {
        Debug.Log("action");
    }
}

기본적으로 Action을 사용해서 다른 클래스의 특정 함수를 동작시키기 위해서는

1. Action 변수 생성

2. 다른 클래스에서 해당 Action에 함수를 추가

3. Action을 Invoke 하면 다른 클래스의 해당 함수가 실행

하는 식으로 동작한다

 

그런데 여기서 추가로 단순히 함수를 실행시키는 것뿐만 아니라 인자를 전달해 줄 수도 있다

public class Class1 : MonoBehaviour
{
    Action<int> action;
    
    private void Trigger(int index)
    {
        action.Invoke(index);
    }
}

public class Class2 : MonoBehaviour
{
    private void Start()
    {
        action += {Class1 Component}.ActionFunc
    }

    public void ActionFunc(int index)
    {
        Debug.Log(index);
    }
}

위와 같이 코드를 작성하게 되면, index가 Class2의 ActionFunc까지 전달되어 출력되는 모습을 볼 수 있다

 

Action<int, string> action;

인자를 여러 개 전달하는 action 변수를 생성할 수도 있다