UDN
Search public documentation:

GFxPositioningGuideJP
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」 > SetViewScaleMode、SetAlignment 、SetViewport の解説

SetViewScaleMode、SetAlignment 、SetViewport の解説


概要


この短いチュートリアルでは、GFxMoviePlayer の 3 つの関数である SetViewScaleMode、SetAlignment 、SetViewport について解説しています。これによって、これら関数をいつどのように使用すべきかということがより簡単に理解できるようになります。まず、これらの 3 つの関数は、GFx Movie が Start() および Advance() によって開始された後で、GFx Movie 上で呼び出される必要があります。

通常は、次のように使用することになります。

Unrealscript
function CreateMovie()
{
  MyMovie = new MenuClass;

  // The init function of MenuClass contains Sart() and Advance()
  MyMovie.Init(class'Engine'.static.GetEngine().GamePlayers[MyMovie.LocalPlayerOwnerIndex]);

  MyMovie.SetViewScaleMode(SM_NoScale);
  MyMovie.SetAlignment(Align_TopCenter);
}

SetViewScaleMode のパラメータ


SetViewScaleMode を使用すると、解像度に変更が生じた場合に、GFx Movie をスクリーンに対してどのようにスケーリング / フィットさせるかを指定することができます。Scale Mode は、ActionScript または UnrealScript のいずれかからセットすることができます。

UnrealScript
MyMovie.SetViewScaleMode(SM_NoScale);

  • SM_NoScale - Flash IDE で設定された元の作成済みドキュメントサイズと同じサイズおよびアスペクト比 (AR) を SWF が保持します。これは、UDK における解像度の変更に左右されません。スケーリングは行われませんが、Flash のドキュメントサイズよりも小さいゲーム解像度の場合にクリッピングが行われます。
  • SM_ShowAll - SWF 全体が常にビジブルとなります。UDK で設定した解像度に左右されません。このことを守るために、SWF 上で均等スケーリングを実行します。元の AR を保持します。クリッピングは実行されませんが、レターボクシングが実行されます。
  • SM_ExactFit - SWF を伸張させるか、あるいは、非均等スケーリングすることによって、スクリーンの解像度にフィットさせます。AR が変更されます。これによって、X または Y のいずれかでムービークリップの歪みが生じます。クリッピングは実行されません。
  • SM_NoBorder - SWF が常に元の AR で表示されます。ただし、解像度に応じてスケーリングされます。Flash のドキュメントサイズよりも小さいゲーム解像度の場合にクリッピングが行われます。

ActionScript
Stage.scaleMode = "noScale";

  • noScale - SM_NoScale と同じです。
  • showAll - SM_ShowAll と同じです。
  • exactFit - SM_ExactFit と同じです。
  • noBorder - SM_NoBorder と同じです。

SetAlignment のパラメータ


SetAlignment を使用することによって、スクリーン上に GFx Movie をどのように配置させるかを指定することができます。 SetAlignment は、ActionScript または UnrealScript から設定することができます。

UnrealScript
MyMovie.SetAlignment(Align_TopCenter);

  • Align_Center - SWF が、スクリーン上における水平方向および垂直方向の中央に配置されます。
  • Align_TopCenter - SWF の上端がスクリーンの上端と一致するようになるとともに、SWF がスクリーン上における水平方向の中央に配置されます。
  • Align_BottomCenter - SWF の最下部がスクリーンの最下部と一致するようになるとともに、SWF がスクリーン上における水平方向の中央に配置されます。
  • Align_CenterLeft - SWF が、スクリーンの左端に合わせられて、垂直方向の中央に配置されます。
  • Align_CenterRight - SWF が、スクリーンの右端に合わせられて、垂直方向の中央に配置されます。
  • Align_TopLeft - SWF の左上隅を、スクリーンの左上隅に一致させます。
  • Align_TopRight - SWF の右上隅を、スクリーンの右上隅に一致させます。
  • Align_BottomLeft - SWF の左下隅を、スクリーンの左下隅に一致させます。
  • Align_BottomRight - SWF の右下隅を、スクリーンの右下隅に一致させます。

ActionScript
Stage.align = "TL";

  • C - Align_Center と同じです。
  • TC - Align_TopCenter と同じです。
  • BC - Align_BottomCenter と同じです。
  • CL - Align_CenterLeft と同じです。
  • CR - Align_CenterRight と同じです。
  • TL - Align_TopLeft と同じです。
  • TR - Align_TopRight と同じです。
  • BL - Align_BottomLeft と同じです。
  • BR - Align_BottomRight と同じです。

SetViewport


SetViewport を使用することによって、GFx Movie のビューポートのサイズと位置を手動で変更することができます。

例 : MyMovie.SetViewport(0, 0, 1280, 720) とした場合は、スクリーン座標の 0,0 からムービーの左上隅が始まり、1280×720 のサイズでムービーを表示されることになります。

使用例

  • Flash で、1280×720 の新たなドキュメントを作成します。
  • 異なるカラーの小さな長方形を 4 個作成し、Flash ファイルの四隅に各長方形を配置します。その際、それぞれの長方形が端から 15 ピクセルほど離れるようにします。
  • 4 個の長方形すべてをムービークリップに変換します。重要 : 長方形のレジストレーション ポイントはすべて、長方形の左上隅にする必要があります。[convert to symbol] (シンボルに変換) ウィンドウでレジストレーション ポイントのアイコンを使用して、各長方形をシンボルに変換する際、必ず、レジストレーション ポイントを適切に設定するようにしてください。
  • 各長方形にインスタンス名を付けます。左上の長方形から時計回りに、それぞれ rectangle、rectangle2、rectangle3、rectangle4 と名付けます。以上によって、次のようになります。
    HUDAlignment.png
  • 新たな actions レイヤーを作成します。
  • そのレイヤー上で、以下のコードを入力します。

ActionScript
_global.gfxExtensions = true;

Stage.scaleMode = "noScale";
Stage.align = "TL";

var srl:Object = new Object();

function updateHud():Void
{
  // position the rectangles 15 pixels from the edges

  // top left
  rectangle1._y = 15;
  rectangle1._x = 15;

  // top right
  rectangle2._y = 15;
  rectangle2._x = (Stage["visibleRect"].width - 15) - rectangle2.width;

  // bottom right
  rectangle3._y = (Stage["visibleRect"].height - 15) - rectangle3.height;
  rectangle3._x = (Stage["visibleRect"].width - 15) - rectangle3.width;

  // bottom left
  rectangle4._y = (Stage["visibleRect"].height - 15) - rectangle4.height;
  rectangle4._x = 15;
}

// Tells the stage to listen for changes.
Stage.addListener(srl);

// Stage resize handler - runs any time the movie is resized via resolution change.
srl.onResize = function()
{
    updateHud();
}

// Call updateHud on initialization
updateHud();

stop();

  • SWF を保存、パブリッシュして、UDK にインポートします。 Kismet を使用する (GFx Movie を開く) か、あるいは、HUD としてスクリーン上でこの SWF を表示する UnrealScript クラスを作成します。
  • 1280×720 の解像度でゲームを起動します。作成したばかりの HUD が表示されるはずです。
  • タブキーを使ってコンソールを開き、解像度を他の値に変更します。例えば、800×600 にします。そのためには、setres 800x600 を使用します。
  • 4 つの長方形が、HUD においてまったく同じ位置 (四隅) にありながら、同じサイズである (スケーリングされていない) ことに注目してください。

ALERT! 補足 : 次のように ActionScript の align (配置) および scale (スケーリング) モードを使用しないで、

ActionScript
Stage.scaleMode = "noScale";
Stage.align = "TL";

UnrealScript を使用して同じことを実現することができます。

UnrealScript
MyMovie.SetViewScaleMode(SM_NoScale);
MyMovie.SetAlignment(Align_TopLeft);