TIL: Unity의 Action 활용하기

김보근·2025년 1월 10일

Unity

목록 보기
98/113

TIL: Unity의 Action 활용하기

오늘은 Unity에서 Action을 활용하는 방법에 대해 정리해봤다.
Action은 C#에서 제공하는 델리게이트(delegate)의 한 종류로, 반환값이 없는 메서드 대리자 역할을 한다. 이걸 잘 활용하면 코드가 훨씬 깔끔해지고 유지보수하기 쉬워진다.

Action 기본 사용법

using System;

Action myAction = () => Console.WriteLine("Hello, Unity!");
myAction.Invoke(); // 결과: Hello, Unity!

위처럼 Action은 매개변수를 받을 수도 있고, 필요에 따라 다양한 형태로 사용할 수 있다.

Unity에서의 활용 예시

이벤트 시스템 구현
게임 내에서 특정 이벤트가 발생할 때 Action을 활용해 호출할 함수를 유연하게 설정할 수 있다.

public class Player : MonoBehaviour
{
    public Action OnPlayerDead;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) // 예시로 스페이스바를 사망 조건으로 설정
        {
            Die();
        }
    }

    void Die()
    {
        Debug.Log("Player Died");
        OnPlayerDead?.Invoke(); // 구독된 모든 메서드를 호출
    }
}

구독/해제 패턴

Action은 쉽게 구독/해제를 관리할 수 있어 협업이나 복잡한 로직에서 유용하다.

public class GameManager : MonoBehaviour
{
    [SerializeField] private Player player;

    void Start()
    {
        player.OnPlayerDead += HandlePlayerDead; // 이벤트 구독
    }

    void OnDestroy()
    {
        player.OnPlayerDead -= HandlePlayerDead; // 이벤트 해제
    }

    void HandlePlayerDead()
    {
        Debug.Log("Game Over");
    }
}

알게 된 점

Action은 반환값이 없지만, 매개변수를 받을 수 있는 형태도 제공한다. 예: Action
코드 흐름을 더욱 명확하게 만들 수 있다. 특히 이벤트 기반 프로그래밍에 적합하다.
구독/해제를 명시적으로 관리해야 메모리 누수를 방지할 수 있다.

앞으로의 활용

앞으로는 이벤트를 처리할 때 델리게이트 대신 Action을 적극적으로 활용해볼 생각이다. 특히, 여러 클래스 간의 결합도를 낮추는 데 효과적일 것 같다.

profile
게임개발자꿈나무

0개의 댓글