UDN
Search public documentation:

CLIKINIListKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 유저 인터페이스와 HUD > Scaleform GFx > ini 파일에서 목록 채우는 법

ini 파일에서 목록 채우는 법


문서 변경내역: James Tan 작성. 홍성진 번역.

개요


ActionScript 에서 스크롤 목록, 드롭다운 등을 채우는 것은 꽤나 쉽습니다. 인스턴스 이름이 "dropDownList" 라는 드롭 다운 메뉴가 있다 가정한다면, 'dataProvider' 프로퍼티를 사용해서 그 목록을 채우기만 하면 됩니다:

ActionScript
dropDownList.dataProvider = ["row1", "row2", "row3", "row4", "row5", "row6", "row7", "row8"];

그러나 대부분의 경우 UnrealScript 를 통해 동적으로 목록을 채우게 되는데, 역시 충분히 쉽습니다.

INI 파일


UDK 환경설정 파일, 특히 DefaultUI.ini 를 통해 목록을 채울 것입니다. 파일을 열고 맨밑에 이렇게 추가합니다. (: 여기서는 드롭 다운 목록이 들어있는 클래스가 SFMenuTutorial 이라 가정합니다):

[UTGame.SFMenuTutorial]
+ListOptions=(OptionName="Option 1",OptionLabel="Cool",OptionDesc="Something cool.")
+ListOptions=(OptionName="Option 2",OptionLabel="Awesome",OptionDesc="Something awesome.")
+ListOptions=(OptionName="Option 3",OptionLabel="Amazing",OptionDesc="Something amazing.")

각 줄은 목록의 옵션 하나를 나타냅니다.

OptionLabel 이 목록에 표시되는 것입니다. 다른 항목은 옵션이구요. 각 항목을 쉼표로 구분해 주기만 하면 각 줄마다 몇 개의 항목이든 포함시킬 수 있습니다.

Unrealscript


이제 드롭다운 스크롤 목록이 들어있는 UnrealScript 파일(제 경우는 SFMenuTutorial)에서, 환경설정 선언 부분에 UI 파일을 꼭 포함시키도록 하십시오. 이건 보통 환경설정 파일 이름에서 "Default" 부분을 뺀 것입니다. "DefaultUI.ini" 의 경우엔 이렇게, "UI" 만 쓰면 되겠죠:

Unrealscript
class SFMenuTutorial extends GFxMoviePlayer
  config(UI);

다음으로 중요한 변수를 몇 개 선언합니다. 첫 변수는 플래시 내 실제 드롭 다운 스크롤 목록에 대한 리퍼런스로 사용됩니다. 다음은 구조체로, 목록의 각 옵션은 string 변수 셋으로 이루어져 있습니다.

Unrealscript
/** 드롭 다운 메뉴입니다. */
var GFxClikWidget DropDown;

/** 목록의 각 옵션을 정의하는 구조체입니다. */
struct Option
{
  var string OptionName;
  var string OptionLabel; // 목록에는 이것이 표시됩니다.
  var string OptionDesc;
};

그런 다음 DefaultUI 에 정의된 각각의 옵션을 담게 될 이 구조체형(Option) 배열을 선언합니다. 이 배열에는 "var" 키워드 뒤에 "config" 을 추가하여, 이 배열에 대한 데이터는 환경설정 파일에서 찾을 수 있는 것임을 나타내도록 했습니다. 우리가 원한 데이터는 그 환경설정 파일에서 ListOptions 라는 이름의 항목 열에서 찾을 수 있습니다. (위 참고):

Unrealscript
/** 모든 목록 옵션 배열로, DefaultUI.ini 에 정의된 것입니다. */
var config array<Option> ListOptions;

다음으로 드롭 다운 목록을 초기화시킵니다. 플래시의 드롭 다운 목록에 "dropDownList" 라는 이름의 인스턴스가 있다고 가정하구요:

Unrealscript
event bool WidgetInitialized(name WidgetName, name WidgetPath, GFxObject Widget)
{
  switch(WidgetName)
  {
  case ('dropDownList'):
    DropDown = GFxClikWidget(Widget);
    SetUpDataProvider(DropDown);
    break;

  default:
    break;
  }
  return true;
}

주목할 것은 SetUpDataProvider() 에다 새로이 리퍼런스된 'DropDown' 위젯을 인수 전달하여 실행한다는 것입니다. 그 함수가 다음에 오지요. 본질적으로는 임시 오브젝트(TempObj)를 만들어서 환경설정 파일의 ListOptions 열에서 찾은 여러가지 옵션을 담고 있다가, 그 각각의 옵션은 DataProvider 라는 배열에 요소 오브젝트로 보관합니다. 그런 다음 그 옵션 오브젝트 배열(DataProvider)을 드롭 다운 메뉴의 "dataProvider" 프로퍼티에, SetObject 를 사용해서 할당합니다.

Unrealscript
function SetUpDataProvider(GFxClikWidget Widget)
{
  local byte i;
  local GFxObject DataProvider;
  local GFxObject TempObj;

  DataProvider = CreateArray();

  switch(Widget)
  {
  case(DropDown):
    for (i = 0; i < ListOptions.Length; i++)
    {
      TempObj = CreateObject("Object");
      TempObj.SetString("name", ListOptions[i].OptionName);
      TempObj.SetString("label", ListOptions[i].OptionLabel); // 목록에는 이것이 표시됩니다.
      TempObj.SetString("desc", ListOptions[i].OptionDesc);

      DataProvider.SetElementObject(i, TempObj);
    }
  }

  Widget.SetObject("dataProvider", DataProvider);
}

마지막으로 defaultproperties 에 드롭 다운에 대한 위젯을 바인딩해 주는 것, 잊지 말고요.

Unrealscript
defaultproperties
{
  WidgetBindings.Add((WidgetName="dropDownList",WidgetClass=class'GFxClikWidget'))
}

이게 답니다!

부록


드롭 다운 목록이 있으면 표시되는 열의 수는 자동으로 변합니다. 즉 옵션이 5 줄 미만, 이를테면 3 줄 있다 친다면, 목록에는 3 줄만 표시됩니다. 최대로는 5 줄까지, 'DropdownMenu.as' 에 하드코딩된 대로인데, 물론 변경 가능합니다.

ScrollingList 의 경우, UnrealScript 에 수동으로 rowCount 를 다음과 같이 지정해 줘야 합니다:

Unrealscript
MyScrollingList.SetFloat("rowCount",ListOptions.Length);