UDN
Search public documentation:

GFxKismetInputJP
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」 > Kismet でキーボード入力をキャプチャする方法

Kismet でキーボード入力をキャプチャする方法


UDK での前回テスト 2011年5月2011年

概要


このチュートリアルでは、Kismet を使用してキーボード入力をキャプチャすることによって、そのキャプチャされた入力を GFx ムービーが利用して何らかのことができるようにする方法について解説します。UnrealScript はまったく書く必要がありません! この使用例としては、プレイヤーが近づいた時に、インタラクト可能となるレベル内の GFx ムービーなどが考えられます。(コンピュータ コンソールなど)。

セットアップ


シンプルで赤い正方形を、新たな Flash ファイルのステージ中央に作成します。この正方形をムービークリップに変換して、[Properties] (プロパティ) パネルで myGraphic というインスタンス名を付けます。この Flash ファイルを UDK インストールの適切な位置に保存します。

ActionScript


以下のコードを、Flash ファイルの frame 1 上にある actions という新たなレイヤー上に置きます。

ActionScript
_global.gfxExtensions = true;
_perspfov = 25; // Used in 3D transformations. Can be any value from 1 to 179.

var keyboardInput:Object = new Object(); // creates a new object to hold keyboard input.
Key.addListener(keyboardInput); // uses the object to listen for keyboard input.

/* when a key is pressed, execute this function. */
keyboardInput.onKeyDown = function()
{
    /* store the keyboard input ASCII code inside 'keyPressed'. */
    var keyPressed:Number = Key.getCode();

    /* if LEFT ARROW was pressed... */
    if (keyPressed == 37)
    {
        /* rotate the movie clip by +5 degrees. */
        myGraphic._yrotation += 5;
    }
    /* if RIGHT ARROW was pressed... */
    else if (keyPressed == 39)
    {
        /* rotate the movie clip by -5 degrees. */
   myGraphic._yrotation -= 5;
    }
}

ALERT! 注意 : 「Scaleform」は現在のところ getAscii() をサポートしていません。それに代わって、getCode() を必ず使うようにします。

ムービーを保存およびパブリッシュします。

UDK の初期セットアップ


UDK において、シンプルなテストレベルを作成します。光源とプレイヤースタートがある 1 つの部屋で十分でしょう。さらに、次のようにします。

  • 部屋のどこかに BSP キューブを作成します。GFx ムービーは、このキューブのいずれかの面に表示することになります。
  • キューブのいずれかの面の真正面にトリガーを追加します。
  • ここで、SWF ファイルをコンテンツブラウザにインポートします。
  • 新たにインポートされた SWF ファイルと同じパッケージの中に、新たな TextureRenderTarget2D を作成します。これを myRT と名付けます。
  • 同じパッケージの中に新たなマテリアルを作成します。これを myMat と名付けます。
  • マテリアルエディタのウィンドウ内で、新たな TextureSample を追加します。
  • TextureSample のブラック (RGB) 出力を、マテリアルの Diffuse 入力にアタッチさせるとともに、ホワイト (アルファチャンネル) 出力を、マテリアルの Opacity 入力にアタッチさせます。
  • マテリアルを選択して、マテリアルのドロップダウンの中で、Blend Mode を BLEND_AlphaComposite にセットします。
  • マテリアルエディタを開いたままにしておき、コンテンツブラウザに戻り、myRT を選択します。
  • マテリアルエディタに戻り、TextureSample を選択し、緑の矢印を用いて myRT をテクスチャのフィールドに挿入します。
  • マテリアルエディタのウィンドウを閉じ、変更を保存します。
  • SWF ファイルおよびレンダリングテクスチャ、マテリアルを含むパッケージを保存します。
  • BSP キューブの面を選択します。トリガーの隣の面が望ましいです。さらに、myMat がコンテンツブラウザで選択された状態で、右クリックし、Apply Material (マテリアルの適用): myMat を選択します。
  • すべてをビルドしてレベルを保存します。

Kismet のセットアップ


Kismet を開き、次の手順に従います。

  • Level Loaded (レベルのロード) イベントを追加します。
  • Open GFx Movie (GFx ムービーを開く) アクションを追加します。
  • Loaded (ロード) と Visible (可視化) を、Open GFx Movie の In に接続します。
  • 新たな Object Variable (オブジェクト変数) を作成して、Open GFx Movie の Movie Player (ムービープレイヤー) の出力にアタッチさせます。
  • Open GFx Movie を選択し、コンテンツブラウザから SWF を Movie フィールドに挿入します。
  • コンテンツブラウザから myRT を Render Texture フィールドに挿入します。
  • Render Texture Mode を RTM_AlphaComposite にセットします。
  • ここで、レベル内でトリガーを選択し、さらに、Kismet 内で右クリックして、New Event Using Trigger_x -> Touch を選択します。
  • 新たなトリガーノードの Sequence Event (シーケンス イベント) ドロップダウン内で、Max Trigger Count (最大トリガー数) を 0 にセットします。
  • 新たな Set GFx Captured Keys (GFx キャプチャキーの設定) アクションを追加します。
  • Movie Player の入力を、上記の 4 番目の手順で作成した Object Variable (オブジェクト変数) に接続します。
  • Trigger (トリガー) ノードの Touched (タッチ) 出力を、Captured Keys (キャプチャキー) ノードの Activate (アクティブ化) 入力に接続し、さらに、UnTouched (タッチ解除) 出力を、DeActivated (非アクティブ化) 入力に接続します。
  • Captured Keys (キャプチャキー) ノードを選択するとともに、緑のプラス アイコンを使用して、2 個の Capture Key を追加します。
  • [0] を Left にセットし、[1] を Right にセットします。

レベルを保存し、エディタでプレイします。

GFx ムービーまで近づいて行くと、赤い正方形が表示されます。キーボードの左方向キーと右方向キーを使用して、3D 空間における正方形の回転を変更することができます。ムービーから遠ざかることによって、左および右方向キーが解除されます。

BSP の代わりに、静的メッシュ上でもまったく同じく簡単に myMat マテリアルを配置することが可能です。