티스토리 뷰

많은 프로그래머들은 assert 가 유용하다는 사실을 알고 있습니다. '하늘로 차라'를 만들면서 가장 많이 썼던 코드 중 하나인 Debug.Assert() 활용법을 적어봅니다.


 하늘로 차라 Up Up Up!



 유니티는 하나의 게임 씬(scene)에 여러 객체를 넣고, 그 객체를 중심으로 메인 게임 로직이 돌아가는 경우가 많을 것 입니다. 특히 게임 매니저 객체나, 네트워크 매니저 객체, 혹은 주인공 객체등으로 구성할 수 있습니다. 이렇게 되면 어느 규모 이하의 개발까지는 이 객체에 연결된 script 에 많은 public GameObject 들을 노출시키고, 다른 game object 들을 연결하게 됩니다. 그리고 이 연결을 종종 끊고 다른 객체들을 연결하기도 합니다.

 그런데, 이런 과정들을 거치다보면 종종 실수로 객체의 연결이 끊어진 채 지나치게 되기도 합니다. 그러다가 나중에 릴리즈 후에 발견하거나, 특정 상황이 되었을 때만 크래시를 내기도 하죠. 주로 null exception 이 발생할 것 입니다.


 이를 방지하기 위해서 항상 Start() 에서 Debug.Assert() 를 이용해서 해당 객체의 연결이 살아있는지를 확인하면 매우 편리합니다. 그러면 빨리 문제를 확인할 수 있습니다. 빠른 문제 확인은 더 단단한 프로그래밍을 할 수 있게 도와줍니다.


 다음과 같은 형태로 코드를 작성하면,


public GameObject main_character_;


void Start() {

  Debug.Assert(main_character_);

}


void Update() {

  if (height_ > 100.0f) {

    main_character_.foo();

  }

}



 위의 코드의 Update() 함수를 보면 특정 조건이 만족했을 때 main_character_ 를 사용하게 되는데 이 때 main_character_ 의 연결이 끊어졌음을 확인하게 된다면 상당히 위험합니다. 그러므로 Start() 에서 미리 main_character_ 가 연결이 잘되어있음을 Debug.Assert() 를 통해서 확인해두는 것이 안전합니다.


 main_character_ 를 inspector 에서 연결하지 않거나, main_character_ 의 변수 이름을 바꿔서 inspector 에서 연결을 끊어버리거나 했을 때 빨리 발견할 수 있습니다.


 한 줄 결론: inspector 에서 가져오는 객체들은 항상 Start() 에서 assert 를 걸고 쓰는 습관을 들이면 좋습니다.

 



신고
댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
669
Today
0
Yesterday
1
링크
TAG
more
«   2017/11   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함