본문 바로가기

소프트웨어/C# + Unity

[Unity C#] RequireComponent 와 SerializeField 에 대해서

유니티를 공부하다보면 자바 혹은 C#과 유사하거나 똑같은 문법이 많다.


하지만 유니티를 공부하면서 자바 혹은 C#에 대한 이해가 부족할 경우 코드를 이해하는데 어려움이 있다.


기본적으로 Unity 프로그램에서 많이 사용하는 스크립팅 API 2가지에 대해서 살펴보자.


1. RequireComponent


기본적인 문법은 C#과 동일하다.


[RequireComponent(typeof(컴퍼넌트 이름))]


만약 코드에 다음과 같이 입력을 하면 어떻게 될 것인가?


[RequireComponet(typeof(Rigidbody))] 만 넣었는데 아래와 같이 Rigidbody가 추가된 것을 볼 수있다. 


스크립트를 실행하는데 꼭 필요한 컴퍼넌트를 넣어줌으로써 오류를 최소화 한다는 컨셉이다. 



2.  SerializeField 


변수위에 SerializeField를 쳐주면 인스펙터창에서 공개가 되며 실해시 변수의 값을 조정해볼 수 도 있다

[SerializeField]

private int columns = 1;



엄밀히 말하면 public으로 선언해 주어도 동일하지만 다른코드 상에서 접근을 못하게 private으로 선언 후 SerializeField를 작성해주는 것이 더 오른 방법이라고 생각한다. 유니티 공식 문서를 보면 [SerializeField] 를 거의 사용할 일이 없을 것이라고 나오고, public 변수의 선언을 권장하지만, 다른 여러 프로그래머의 의견은 이것이 나쁜 OOP(객체지향프로그래밍) 습관이라고 주장한다.


한편으로는 Public 선언이 Private 선언보다 더 나은 성능을 낼 수 있다는 주장도 있다. 하지만 개인적으로는 
[SerializeField]를 선호한다.


3. Header


이것은 인스펙터창에 그룹핑을 해주는 것이다.

[Header ("Input Options:")] 이런식으로 작성을 해주면 아래와 같이 그룹핑된 변수들을 확인할 수 있다.




[Header ("Input Options:")]


[SerializeField]

protected bool mouse = true;

[SerializeField]

protected bool touch = true;

[SerializeField]

protected bool controller = false;


위 그림은 이런식으로 구현된 화면이다.