UDN
Search public documentation:

GFxUDKFrontEndGuideJP
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」 > GFx UDKFrontEnd を理解する

GFx UDKFrontEnd を理解する


概要


本ドキュメントでは、UDK とともに出荷されるメニューの各ビューが GFxUDKFrontEnd によってロードおよび表示される仕方について、段階を追って高度な説明をします。

この 簡易版 では、メニューマネージャを使用してビュースタックに 2 つのビュー (Main Menu と Options) をプッシュおよびポップさせるために必要となるコードとアセットについて解説しています。これには、カスタムのファイルとアセットが含まれています。(下の記事では扱われていませんが、実行でも同様です)。

ALERT! 注意 : 次の 2 行を DefaultEngine.ini ファイルの中の [Engine.PackagesToForceCookPerMap] に追加してください。

DefaultEngine.ini
.Map=SF-FrontEnd
.Package=SFSandbox

関係ファイル


関係する UnrealScript ファイル

  • メニューマネージャ - \Development\Src\UTGame\GFxUDKFrontEnd.uc
  • ビュー - \Development\Src\UTGame\GFxUDKFrontEnd_MainMenu.uc 、*Multiplayer.uc 、*Settings.uc など
  • ビューのための基本クラス - Development\Src\UTGame\GFxUDKFrontEnd_Screen.uc
  • 基本ビュークラス - \Development\Src\UTGame\GFxUDKFrontEnd_View.uc

関係する Flash ファイル

  • マネージャ - \UDKGame\Flash\UDKFrontEnd\udk_manager.fla
  • ビュー - \UDKGame\Flash\UDKFrontEnd\udk_main_menu.fla 、*multiplayer.fla 、*settings.fla など。
  • 次のファイルから得られる全グラフィックアセット - \UDKGame\Flash\UDKFrontEnd\udk_assets.fla

関係する ActionScript ファイル

  • ビュー - \UDKGame\Flash\ActionScript\com\scaleform\udk\view s\MainMenuView.as 、MultiplayerView.as 、SettingsView.as など
  • マネージャ - \UDKGame\Flash\ActionScript\com\scaleform\udk\mana gers\MenuManager.as
  • ドキュメントのクラスを登録するためのユーティリティ - \UDKGame\Flash\ActionScript\com\scaleform\udk\util s\UDKUtils.as

その他のファイル

  • \UDKGame\Config\DefaultUI.ini
  • \UDKGame\Content\Maps\UT3\UDKFrontEndMap.udk

GFxUDKFrontEnd.uc は、フロントエンド (メニュー) のためのマスタークラス (あるいは、マネージャ) です。これは、Open GFx Movie を介して Kismet で、起動レベル (UDKFrontEndMap) において呼び出されます。その場合ロードされる Movie は、UDKFrontEnd.udk_manager です。また、Movie Player Class は、GFxUDKFrontEnd にセットされます。Take Focus (フォーカスを取る)、Capture Input (入力をキャプチャする)、Display With Hud Off (HUD がオフの状態で表示) には、すべてチェックが入ります。

  • GFxUDKFrontEnd の SWF は、defaultproperties の中で UDKFrontEnd.udk_manager として定義されています。
  • udk_manager.FLA/SWF は、com’scaleform.udk.managers.MenuManager (MenuManager.as) のドキュメントクラスが与えられます。
    • MenuManager.as は、 _viewStack 配列を初期化するとともに、ビュースタックをトゥイーン (アニメート) するための複数の関数を提供します。
    • udk_manager.FLA には、空の movieClip (manager という型のマネージャ) が含まれます。この movieClip は、ビューを保持するために使用されることになります。

GFxUDKFrontEnd コールスタック


  • ViewInfo データ構造体を作成します。
    • ViewName 、SwfName 、DependantViews
    • これらの値は、DefaultUI.ini におけるデータによって満たされることになります。
  • ViewInfo 型の ViewData[] 配列を作成します。
    • DefaultUI.ini で定義される +ViewData 行
  • Start() が実行されます。
    • ConfigFrontEnd() を呼び出します。
  • ConfigFrontEnd() が実行されます。
    • udk_manager.fla の "_root" が RootMC にキャッシュされます。
    • udk_manager.fla から "manager" がキャッシュされます。
  • Start()LoadViews() 呼び出します。
  • LoadViews() が実行されます。
    • LoadView() を呼び出し、ViewData[] 配列の各要素 (各ビュー) が渡されます。
  • LoadView() が実行されます。
    • 新たな空のムービークリップが ManagerMC 内部で作成されます。その名前の形式は、SomeViewNameContaine です。(例 : MainMenuContainer 、MultiplayerContainer 、HostGameContainer など)。
      • さらに、この新たなムービークリップが ViewContainer に参照されます。
    • さらに、新たな空のムービークリップが ViewContainer 内に作成されます。名前の形式は、SomeViewName です。
      • この新たなムービークリップが ViewLoader によって参照されます。
    • SWFName を取得して、asvals の args[] 配列における要素 0 に、string として保存します。
    • さらに、ViewLoader 上で "loadMovie" (GFxObject 内にある標準の Flash 関数) を呼び出し、args[] 配列を介して SWFName を渡します。
      • これによって、そのビューのための実際の SWF ファイルが、新たなムービークリップとして ViewLoader ムービークリップにロードされます。
      • この SWF ファイルは、ドキュメントクラスをセットします。 (例 : com.scaleform.udk.views.MainMenuView (MainMenuView.as))。
      • SWF ファイルには、container というインスタンス名をもつ container 型の空のムービークリップが含まれます。
        • container 内には、実行時共有によってロードされる別のムービークリップがあります。たとえば、udk_main_menu.fla には、main_menu 型の main_menu ムービークリップがあります。
          • これらのムービークリップは、実行時共有によって udk_assets.swf から SWF にインポートされたものです。
          • UDK_assets.swf には、ライブラリのすべてのビューが含まれます。各ビューは、プロパティにおいて、実行時共有のためにエクスポートされるように設定されます。
      • 新たにロードされた SWF は、CLIK WidgetInitialized イベントをアクティベートします。
    • 最後に、ビューの名前を LoadedViews[] に追加します。
  • WidgetInitialized() は、各ビューがロードされた時に、ロードされた各ビューのために実行されます。
    • 例 : MainMenu
      • MainMenuView は、GFxUDKFrontEnd_MainMenu 型として作成されます。
      • ConfigureView() を呼び出します。
      • ConfigureView() が実行されます。
        • SetWidgetPathBinding() が呼び出されます。 - この関数によって、ビューのパスにあるすべての子ウィジェットが、initCallBack イベントをビューの WidgetInitialized() ハンドラに送るように設定されます。
          • このためには、ウィジェットをバインドする際に、defaultproperties 内にある通常の WidgetBindings.Add ではなく、SubWidgetBindings.Add を使用しなければなりません。
      • ConfigureTargetView() を呼び出します。(MainMenuView のためにだけ)。
  • ConfigureTargetView() が実行されます。(最初のビュー、メインメニューのために)。
    • この関数は、まずテストすることによって、ビューがすでにスタック上にあるか否かを確認します。
    • OnViewActivated() を呼び出します。(GFxUDKFrontEnd_View.uc にあります)。
    • OnTopMostView() を呼び出し、true を渡します。
      • OnTopMostView() によって、オープニングアニメーションが再生され、エスケープキーのデリゲートがセットされます。
    • ビューに UnrealScript ViewStack[] 配列を追加します。
    • PushView() を呼び出します。
  • PushView() が実行されます。
    • MenuManager.as 内の ActionScript 関数 pushStandardView() をアクティベートし、新たなビューを渡します。

MenuManager コールスタック


  • pushStandardView() が実行されます。
    • pushViewImpl() を呼び出します。
  • pushViewImpl() が実行されます。
    • 新たなビューを適所にトゥイーンします。
    • 新たなビューを AS で _viewStack[] 配列にプッシュします。

ビューを「ポップ」する


ビューがビュースタックから「ポップ」する場合 (BACK を押すことによってマルチプレイヤースクリーンからメインメニューに戻るような場合)、使用される必須の関数は次のとおりです。

  • PopView()
  • PopViewStub()

  • 各スクリーンには Back ボタンがあります。Back ボタンは、defaultproperties 内の GFxUDKFrontEnd_Screen.uc でバインドされます。

Unrealscript
defaultproperties
{
  // General
  SubWidgetBindings.Add((WidgetName="list",WidgetClass=class'GFxClikWidget'))
  SubWidgetBindings.Add((WidgetName="back",WidgetClass=class'GFxClikWidget'))

  AcceptButtonImage="pc_enter_png"
  CancelButtonImage="pc_esc_png"
  AcceptButtonHelpText="SELECT"
  CancelButtonHelpText="BACK"
}

  • GFxUDKFrontEnd_Screen.uc の WidgetInitialized() ハンドラにおいて、Back ボタンは、CLIK_press イベントをリッスンするとともに、押された時に Select_Back() を実行するように命じられます。

Unrealscript
case ('back'):
  BackBtn = GFxClikWidget(Widget.GetObject("btn", class'GFxClikWidget'));
  BackBtn.SetString("label", "BACK");
  BackBtn.AddEventListener('CLIK_press', Select_Back);
  BackBtn.AddEventListener('CLIK_focusIn', FocusIn_BackButton);
  bWasHandled = true;
  break;

  • Select_Back() イベントハンドラは、GFxUDKFrontEnd_View にあります。これによって、 MoveBackImpl() 関数が実行されます。

Unrealscript
function Select_Back(GFxClikWidget.EventData ev)
{
  MoveBackImpl();
}

  • MoveBackImpl() は、MenuManager (GFxUDKFrontEnd.uc) から PopView() を実行します。

Unrealscript
function MoveBackImpl()
{
  if (MenuManager != none)
  {
    PlayCloseAnimation();
    MenuManager.PopView();
  }
}

  • PopView() は、ViewStack[] 配列から現在のビューを削除します。

Unrealscript
ViewStack.Remove(ViewStack.Length-1, 1);

  • さらに、前のビュー (今は現在のビューとなっている) の OnTopMostView() 関数を実行します。

Unrealscript
ViewStack[ViewStack.Length-1].OnTopMostView( false );

  • 最後に、返り値として PopViewStub() を実行します。
  • PopViewStub() が、MenuManager.as にある popView() ActionScript 関数を実行します。
  • さらに、 popView() が、ムービーをトゥイーンアウトする popViewImpl() を実行します。

ダウンロード


  • GFxUDKFrontEnd の簡易版は、 ここから ダウンロードすることができます。