사용자 동작 또는 게임의 다른 동작에 따라 UI 요소가 표시되거나, 사라지거나, 변하는 동적 UI를 만드는 경우 커스텀 로직에 따라 새 UI 요소를 인스턴스화하는 스크립트를 작성해야 할 수 있습니다.
UI 요소를 동적으로 쉽게 인스턴스화할 수 있으려면 우선 인스턴스화할 수 있도록 할 UI 요소 타입의 프리팹을 만들어야 합니다. 씬에서 표시하고 싶은 방법으로 UI 요소를 설정한 다음 이 요소를 프로젝트 뷰로 드래그하여 프리팹으로 만들어야 합니다.
예를 들어, 버튼의 프리팹은 Image 컴포넌트와 Button 컴포넌트가 있는 게임 오브젝트와 Text 컴포넌트가 있는 자식 게임 오브젝트일 수 있습니다. 설정은 필요에 따라 달라질 수 있습니다.
비주얼 및 모든 것을 포함하여 다양한 타입의 컨트롤을 만드는 API 메서드가 없는 이유가 궁금할 수 있습니다. 그 이유는 버튼이 설정될 수 있는 방법이 무한하다는 것입니다. 이미지와 텍스트를 사용할지, 둘 다 사용할지 등 여러 방법이 있습니다. 어쩌면 여러 개의 이미지를 사용할 수도 있습니다. 텍스트 폰트, 컬러, 폰트 크기 및 정렬은 무엇입니까? 이미지에서 사용해야 하는 스프라이트는 무엇입니까? 프리팹을 만들고 이를 인스턴스화 하여 원하는 방식으로 설정할 수 있습니다. 나중에 UI의 모양과 느낌을 변경하려는 경우 프리팹을 변경하면 동적으로 생성된 UI를 포함한 UI에 반영됩니다.
UI 요소의 프리팹은 Instantiate 메서드를 사용하여 노멀로 인스턴스화됩니다. 인스턴스화된 UI 요소의 부모를 설정하는 경우 worldPositionStays 파라미터가 false로 설정된 Transform.SetParent 메서드를 사용하는 것이 좋습니다.
UI 요소는 일반적으로 사각 트랜스폼을 사용하여 배치됩니다. UI 요소가 레이아웃 그룹의 자식이면 자동으로 포지션이 지정되므로 포지션 지정 단계를 건너뛸 수 있습니다.
사각 트랜스폼의 포지션을 지정하는 경우 우선 트랜스폼에 스트레칭 동작이 있었는지, 또는 있어야 하는지 결정하면 유용합니다. 스트레칭 동작은 anchorMin 및 anchorMax 프로퍼티가 동일하지 않은 경우에 발생합니다.
스트레치되지 않는 사각 트랜스폼의 경우 anchoredPosition 및 sizeDelta 프로퍼티를 설정하여 포지션을 가장 쉽게 지정할 수 있습니다. anchoredPosition은 앵커를 기준으로 피벗의 상대적인 포지션을 지정합니다. sizeDelta는 스트레칭이 없는 경우의 크기와 동일합니다.
스트레칭 사각 트랜스폼의 경우 offsetMin과 offsetMax 프로퍼티를 사용하여 포지션을 더 간편하게 설정할 수 있습니다. offsetMin 프로퍼티는 사각형의 왼쪽 하단 코너를 왼쪽 하단 앵커에 대해 상대적으로 지정하며, offsetMax 프로퍼티는 사각형의 오른쪽 상단 코너를 오른쪽 상단 앵커에 대해 상대적으로 지정합니다.
여러 개의 UI 요소를 동적으로 인스턴스화하는 경우 모두 똑같이 보이고 동일하게 하기를 원하지는 않습니다. 메뉴의 버튼이든, 인벤토리의 항목이든간에, 개별 항목이 다른 텍스트 또는 이미지로 상호 작용할 때 다른 작업을 수행하기 원합니다.
이렇게 하려면 여러 컴포넌트의 프로퍼티를 변경해야 합니다.. Image 및 Text 컴포넌트와 스크립트에서 UnityEvents를 사용하여 작업하는 방법에 대해서는 스크립팅 레퍼런스를 참조하십시오.