이 시리즈는 유니티에서 제공하는 튜토리얼을 정리해서 올린 것입니다.


-----------------------------------------------------------------------------------

어트리뷰트(attribute)


어트리뷰트는 메서드, 변수 또는 클래스를 선언할 때 정보를 첨부할 수 있게 해줍니다.

이는 기존 코드를 개선하거나 변경하는 데 유용합니다.

어트리뷰트 자체는 효과와 용도는 매우 다양합니다.

-----------------------------------------------------------------------------------


24b0d121e09c28a8699fe8b115ef046f5b4e9a9a


3d 구체를 회전시키는 코드가 있습니다.

해당 코드에는 회전속도를 정하기 위한 speed변수가 선언되었으면 현재 0으로 초기화가 되어있습니다.

Update()메서드에서는 현재 speed에 따라 Y축을 중심으로 오브젝트를 회전시킵니다.


이 코드는 잘 작동합니다.

하지만 만약 speed 변수의 값을 제한하고 싶다면 어떻게 해야할까요?


if else문을 사용해 변수의 현재 값을 감지하여 범위를 벗어나지 않도록 코드를 작성해줄 수 있습니다.


또는 어트리뷰트를 사용하는 방법도 있습니다.



이번 경우에는 Range 어트리뷰트를 사용해보겠습니다.

-----------------------------------------------------------------------------------

24b0d121e09c28a8699fe8b115ef046f56499d97

어트리뷰트는 수정하려는 코드 바로 위 또는 바로 앞에 작성됩니다.

일반적으로 스크립트의 다른 부분에 영향을 주지 않습니다.


모든 어트리뷰트의 구문은 대괄호로 시작합니다.

그런 다음 Range 어트리뷰트의 경우 Range 키워드를 쓰고 괄호를 붙입니다.

괄호 안에 최소 및 최대 값을 작성합니다.

이는 어트리뷰트에 영향을 받는 변수가 가질 수 있는 최소 및 최대 값을 의미합니다.

대괄호를 닫고 어트리뷰트를 마칩니다.


저는 변수 위에 어트리뷰트를 배치했습니다. 원한다면 앞에 배치할 수도 있습니다.


Unity로 돌아가 인스펙터 뷰를 확인해봅시다.


24b0d121e09c28a8699fe8b115ef0464d48ee0

speed 변수의 모양이 변했습니다.

최소값에서 최대값까지 이동하는 슬라이더가 생겼습니다.

이제 씬을 실행하면 슬라이더를 움직여 speed 변수를 직접 변경할 수 있습니다.


-----------------------------------------------------------------------------------

다른 어트리뷰트의 예로는 ExecuteInEditMode가 있습니다.

이 어트리뷰트는 스크립트가 플레이 모드(Play mode)가 아닐 때도 실행되도록 합니다.

24b0d121e09c28a8699fe8b115ef046f594c9d



24b0d121e09c28a8699fe8b115ef046c68f4284b

여기 circle 오브젝트가 있는 다른 씬이 있습니다.

이 circle에 붙여진 스크립트는 circle의 색을 빨간색으로 바꾸는 기능을 합니다.


이 스크립트에 ExecuteInEditMode 어트리뷰트를 사용해보도록 하겠습니다


24b0d121e09c28a8699fe8b115ef046eca49cef0

ExecuteInEditMode 어트리뷰트는 스크립트의 모든 코드에 적용되므로 클래스 앞에 배치합니다.

이 어트리뷰트에는 매개변수가 없으므로 괄호가 필요하지 않습니다.



24b0d121e09c28a8699fe8b115ef046c60f22e4a94

Unity로 돌아가면 오브젝트가 빨간색으로 변한 것을 볼 수 있습니다. 씬을 실행하지 않았음에도 스크립트가 실행되었습니다.


-----------------------------------------------------------------------------------

ExecuteInEditMode 어트리뷰트는 주의해서 사용해야 합니다. 일반적으로 스크립트는 씬이 실행될 때 실행됩니다.

씬 실행을 중지하면 씬의 게임 오브젝트에 대한 변경 사항은 되돌려집니다.

그러나 EditMode에서 실행되는 스크립트는 씬의 오브젝트를 수정, 생성 및 삭제할 수 있습니다.

또한 이런 변경 사항이 되돌려지지 않고 영구적입니다.

예를 들어, 씬의 circle은 실제로 영구적으로 빨간색으로 수정되었습니다. 이 문제를 해결하려면 색상을 수동으로 다시 변경해야 합니다.

-----------------------------------------------------------------------------------

자주 쓰이는 [SerializeField]도 어트리뷰트입니다.

이처럼 어트리뷰트에는 정말 다양한 종류가 있으니 찾아보시는 걸 추천드립니다.