Static Variable을 편하게 리셋하는 방법

  1. 개발중인 유니티 프로젝트에서 public static 으로 bool 변수를 사용하는 일이 잦은데,(ex : Is@%%^ModeOn, Is^@#@EventOn, ...), 게임 재시작 시에도 이전 게임의 값이 남아있게 되어 리셋해주어야 한다.
  2. 여태껏 그냥 게임 종료시 함수 하나를 콜 해서 프로젝트 내의 모든 static 변수들의 값을 일일히 초기화해 주는 방법을 썼는데, 코드를 써내려가면서도 되게 저급?한 방법인 것 같다고 자책했었다.

  3. 그런데 오늘 찾아보니 이런 좋은 방법이 있어 공유하려고 한다.

  4. 링크:
  5. https://answers.unity.com/questions/761678/how-to-reset-all-static-variables.html

1
2
3
4
5
6
7
8
9
10
11
class myClass : monobehavior
 {
     public Static myClass Instance;
     public int aVariable = 0;
     void Start()
     {
         Instance = this;
     }
 }
cs
  1. public static int IsModeOn 이 아니라 public static myClass Instance로 해당 static 변수가 선언된 스크립트 타입의 아무 변수나 선언하고 나서, 실제로 static으로 사용할 변수는 그냥 public 으로 선언한다. 위의 예시에서는 int형으로 선언했다.

그 다음 스크립트 시작시에 스크립트 타입의 변수를 this로 정해두면, 앞으로 다른 스크립트에서 위의 aVariable이라는 변수에 접근할때는myClass.Instance.aVariable로 접근하면 된다.

이렇게 해두면 스크립트가 Destroy 될때(스크립트가 컴포넌트로 붙은 오브젝트가 Destroy될때) 자동으로 aVariable도 해제되므로 리셋을 따로 관리하지 않아도 된다.

기존에 public static int aVariable을 선언한 상황에서는 myClass.aVariable로 접근하면 되서 한단계 빨라지긴 하지만, 대신 앞서 설명한 대로 자동 리셋이 되지 않는다.

구현도 어렵지 않고, 유용하게 써먹을 수 있는 킥인것 같다. 

댓글