본문 바로가기
Unity 게임 개발

C# Unity [SerializeField]와 [HideInInspector]

by daisy0461 2021. 4. 19.

다양한 코드를 보면서 [SerializeField]와 [HideInInspector]를 많이 보았었습니다.

 

그런데 그 당시에는 한번 유니티 따라서 코드를 해보면서 익숙해지자 그리고 흥미를 가져보자라는 생각이 커서

이것이 확실히 무엇을 의미하는지 생각하지 않고 잉? 뭐 이상한게 위에 있네? 이건 뭐지.. 이런 생각만 하고 넘어갔습니다.

그런데 지금 다른 사람들이 짰던 코드들을 보면서 나와서 아 저번에 미뤘는데 한번 공부하고 블로그에 포스팅을 해보자 생각이 들어서 지금 해보겠습니다.

[SerializeField]

일단 [SerializeFiled] 먼저 설명드리겠습니다.

아마 이 블로그까지 들어오셨고 이런게 궁금하신 분들은 아실 내용인데

public으로 만들어진 변수는 Inspector창에 나타나게 되고 private은 Inspector창에 뜨지 않습니다.

 

public은 Inspector창에서 쉽게 변경을 할 수 있습니다. 외부의 접근과 조작을 허용하는 것입니다.

하지만 public을 너무 많이 사용을 해서 모든 변수가 Inspector창에 나타나면 뭐가 뭔지 구분하기 힘들고 협업을 할 때에도 문제가 됩니다.

협업을 할 때에 이 값은 참조가 되서 변경이 되면 안되는데 다른 프로그래머가 참조를 해서 변경을 할 수 있기 때문입니다.

그렇다면 public의 장점인 Inspector에서 나타나는 점과 private의 참조를 못하는 특징을 사용하고 싶은데... 어떻게 하지?

다음과 같이 [SerializeField]를 사용하면 됩니다.

위에 예시를 보시면 hide는 private로 선언이 되어서 Inspector창에 보이지 않습니다.

하지만 HP는 private로 선언되었지만 Inspector창에 나타나는 것을 확인할 수 있습니다.

그리고 바로 밑에 AP는 Inspector창에 나타나지 않습니다. 이것으로 [SerializeField]는 바로 아래에 있는 변수만 Insecptor창에 나타나는 것을 알 수 있습니다.

이렇게 하면 Insepctor창에서 값을 바꿔가며 test를 할 수 있습니다.

 

[HideInInspector]

이것은 public변수를 Inspector에 보이지 않게하는 방법입니다.

 

다음과 같이 사용을 하고 동일하게 public int hi는 Inspector창에 나타나고

attack은 [HideInInspector]를 사용해서 Inspector창에 보이지 않습니다.

그리고 speed는 보이는 것으로 보아 [HideInInspector]도 바로 아래의 변수만 적용이 되는 것을 확인할 수 있습니다.