본문 바로가기
스파르타 내배캠

스파르타 내배캠 Unity 3기 - 51

by LemongO 2024. 3. 22.

ActionManager

 

지금까지 UI 작업들을 하면서 여러가지 상호작용에 대한 반응을 Action으로 처리하였다.

이전 글에는 ActionManager를 사용하여 대부분의 Action을 처리하였지만

한창 만들던 중에는 여기저기 Action이 static으로 마구마구 뿌려져있었다.

 

 

어차피 Action을 다양하게 쓸거라면 하나에 몰아서 사용하는 ActionManager가 있으면 좋지 않을까?
라는 생각이 들었고 대부분의 Action을 이 Manager에 몰아 넣었다.

 

public class ActionManager
{
    // # Player
    public event Action OnPlayerDead;

    // # HUD
    public event Action<float> OnCoolDownRepair;
    public event Action<float> OnCoolDownBooster;

    // # LockOn System
    public event Action<Transform> OnLockOnTarget;
    public event Action OnReleaseTarget;
    public event Action<float> OnBossAPChanged;

    public void CallPlayerDead() => OnPlayerDead?.Invoke();

    public void CallUseRePair(float percent) => OnCoolDownRepair?.Invoke(percent);
    public void CallUseBooster(float percent) => OnCoolDownBooster?.Invoke(percent);

    public void CallLockOn(Transform target) => OnLockOnTarget?.Invoke(target);
    public void CallRelease() => OnReleaseTarget?.Invoke();
    public void CallBossAPChanged(float percent) => OnBossAPChanged?.Invoke(percent);

    public void Clear()
    {
        OnPlayerDead = null;
        OnCoolDownRepair = null;
        OnCoolDownBooster = null;        
        OnLockOnTarget = null;
        OnReleaseTarget = null;
        OnBossAPChanged = null;
    }
}

 

Manager들은 Managers 클래스에서 모두 싱글톤으로 관리되고 있기 때문에 쉽게 접근이 가능하고

필요한 Action에 구독 및 호출이 가능하게 만들어뒀다. 그리고 씬을 넘어갈 경우 구독정보가 남아 있으므로

Clear 함수를 통해 초기화 할 수 있도록 만들었다.

 

다만 옵저버 패턴을 쓰면 되지 않을까 라는 생각이 남아있고 패턴공부를 하고 적용하기에 적합하다면 이 방식으로
리팩토링을 해봐야겠다.