UDN
Search public documentation:

GFxSplitScreenKR
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 > 분할화면 처리 방법

분할화면 처리 방법


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

개요


GFx 3.3 에는 포커스 그룹과 분할화면 확장(extension)이 도입되었는데, 나중에 비디오 튜토리얼을 공개할 계획이지만, 지금은 간단히 도움이 될만한 정보를 드리겠습니다:

새로운 포커스 그룹 확장은 분할화면과 가능한 오프라인 멀티플레이어를 위해 단일 무비 인스턴스를 활용합니다. GFx 3.3 은 포커스 그룹을 16 개까지 만들 수 있으며, 특정 콘트롤러를 포커스 그룹에 매핑시키는 인터페이스도 제공합니다. 일단 기본적으로 모든 콘트롤러는 포커스 그룹 0 에 속합니다.

Selection.setControllerFocusGroup 을 사용하면 콘트롤러를 새로운 포커스 그룹에 할당할 수 있습니다.

GFx 3.3 에는 포커스 그룹 마스킹이라는 개념도 도입되어 있는데, focusGroupMask 라는 새로운 확장을 사용합니다. 포커스 그룹 마스크는 16 비트 (0000 0000 0000 0000) 값으로, 각 비트는 해당 인덱스의 포커스 그룹을 나타냅니다. 예를 들어 비트 0 은 포커스 그룹 0 을, 비트 1 은 포커스 그룹 1 을, 비트 2 는 포커스 그룹 2 를 나타내는 식입니다. 비트 0 은 가장 오른쪽에 있는 비트이며, 비트 15 는 가장 왼쪽에 있는 비트입니다. MovieClip.focusGroupMask 확장은 비트를 0 에서 1 로 뒤집어서 무비클립이 어느 포커스 그룹에 속하는지를 표시하는데 사용할 수 있는 것입니다.

포커스 그룹에 콘트롤러 할당


여기 첫 번째 절에서는 플레이어 1(첫 콘트롤러)을 포커스 그룹 0 으로 설정합니다. 여기서 유념할 것은, 모든 콘트롤러 인덱스는 0 부터 시작하니, 첫 콘트롤러라 하면 사실은 콘트롤러 0 이지 1 은 아닙니다. 그런 다음 플레이어 2 의 콘트롤러를 포커스 그룹 1 에 설정합니다.

// 두 포커스 그룹 설정

Selection.setControllerFocusGroup(0, 0);   // 콘트롤러 id 0 을 포커스 그룹 0 으로 설정
Selection.setControllerFocusGroup(1, 1);   // 콘트롤러 id 1 을 포커스 그룹 1 으로 설정

초기 무비 클립 포커스 설정


아래 첫 예제는 CLIK 전용 메서드를 사용해서 myMovieClip1 의 포커스를 이진수 0001 에 해당하는 십진수 1, 즉 포커스 그룹 0 으로 설정하고 있습니다.

예제 2 는 범용 메서드(Selection.setFocus)를 사용합니다. 이 범용 메서드의 경우 포커스 그룹 마스크 대신 둘째 파리미터에 콘트롤러 인덱스를 사용하고 있습니다. 플레이어 2 의 콘트롤러 인덱스는 1 입니다.

//초기 포커스 설정

myMovieClip1.myButton1.focused = 1; // 0x1 - 클릭 전용
Selection.setFocus( myMovieClip2.myButton1, 1 ); // 클릭 전용 아님 (범용)

무비 클립을 포커스 그룹에 고정


이제 각 무비클립과 그 자손을 특정 포커스 그룹에 고정, 즉 그 포커스 그룹에 속하는 콘트롤러만 해당 무비클립에 접근할 수 있도록 합니다.

// 십진수를 사용하여 각 무비클립을 특정 포커스 그룹에 고정시킵니다.

panel1s.focusGroupMask = 1; // 16진수 0x1 - 이진수 0001
panel2s.focusGroupMask = 2; // 16진수 0x2 - 이진수 0010

포커스 그룹에 할당되지 않은 무비클립은 모든 콘트롤러가 접근할 수 있습니다. 그리고 포커스 그룹 마스크를 동원하면 한 무비 클립에 여러 개의 콘트롤러가 접근하도록도 할 수 있습니다.

비트맵 마스크 십진수를 어떻게 줘야 플레이어 1 콘트롤러와 플레이어 2 콘트롤러 둘 다 어느 한 무비클립에 접근하도록 할 수 있을지 알아내기만 하면 됩니다. 즉 콘트롤러 0 에게 접근 권한을 주려면 비트 0 을 1 로 뒤집어 줘야 하고, 콘트롤러 1 에게 접근 권한을 주려면 비트 1 을 1 로 뒤집으면 됩니다. 그러면 이진수로 0011 이 나오며, 이 값은 십진수로 3 이 됩니다.

이진수를 십진수로 변환하는 것은, 웹 기반 변환기가 많이 있으니 참고하시구요.

즉 그 결과 myMovieClip.focusGroupMask = 3 으로 설정하면 됩니다. 콘트롤러 1 과 2 가 동시에 접근할 수 있도록 하는 것이죠.

포커스 인디케이터 그래픽


이 기능은 Button 이나 체크 박스, 라디오 버튼같은 버튼형 컴포넌트용으로 CLIK 이 지원하는 것입니다. 기본적으로 모든 포커스 그룹은 전과 같은 그래픽 인디케이터를 사용합니다. 컴포넌트 안에서, 타임라인 위에 보면 focusIndicator 레이어를 볼 수 있습니다. 포커스 인디케이터는 인스턴스 이름이 focusIndicator 인 무비클립 입니다.

focusIndicator 를 파 내려가 봅시다. 그 안에는 일련의 키프레임이 있겠지요. 첫 프레임부터 시작해서, 스테이지 상에는 그래픽이 없을 것입니다. 그러면 이 프레임에는 state0 이라는 라벨을 할당해 주어야 합니다. 이 프레임은 노 포커스를 나타냅니다. 다른 말로, 플레이어가 콘트롤러로 이 컴포넌트를 선택하지 않았다면, 이 프레임을 표시할 것입니다. 타임라인 상에서 한 프레임 오른 쪽으로 이동하면, 다음 키프레임 라벨은 state1 로 되어 있을 것입니다. 이 키프레임은 플레이어 1 의 콘트롤러, 즉 콘트롤러 0 을 나타내는 그래픽이 필요하며, 바로 이것이 플레이어 1 이 자신의 콘트롤러로 컴포넌트를 선택했음을 나타내는 데 사용되는 프레임입니다. state1 라벨의 1 은 콘트롤러 0 이 할당된 포커스 그룹 0 에 대한 비트마스크 십진수를 나타냅니다.

그 옆 프레임으로 이동해 보면, 다음 키프레임에는 플레이어 2 의 콘트롤러, 즉 콘트롤러 1 에 대한 그래픽이 있어야 합니다. 그리고 이 프레임에 대한 라벨은 state2 입니다. 즉 여기서 이해해야 할 것은, 각 프레임의 라벨은 stateN 식으로 붙여야 한다는 것입니다. N 은 적합한 포커스 그룹 비트마스크 십진수로 대체해서 말이죠. 그리고 물론, 각 프레임에는 그 위에서 중지하는 ActionScript 명령이 있을 것입니다.

다음 프레임의 라벨은 state3 이 되겠습니다. 플레이어 1 과 2 콘트롤러 둘 다에 대한 그래픽이 있겠죠. 기억나시죠? 십진수 3 은 이진수 0011 에 해당한다는 것. 즉 비트 0 과 1 둘 다 켜진(1이 된)다는 뜻으로, state3 프레임은 플레이어 1 과 플레이어 2 콘트롤러 둘 다 해당 컴포넌트에 포커스가 있을 때의 포커스를 나타냅니다. 특정 UI 요소가 처리했으면 하는 모든 콘트롤러 포커스 조합에 대해서 키프레임을 만들어 줘야 합니다. state4, state5, state6 등등, 각기 다른 콘트롤러나 콘트롤러 조합이 하나의 UI 요소에 포커스가 있음을 나타내도록 키프레임을 추가할 수 있는 것입니다.