マップを使用して作業する

ブループリントでマップを使用して作業する方法について説明します。

Windows
MacOS
Linux

workingWithMaps_topicBanner.png

Blueprint Map は ブループリントの配列 の次によく使用される要素です。これには納得のいく理由があります。Blueprint Mapsは、関連付けられているキーを使用して、効率的に値を検索して取得できるためです。このガイドを修了すると、ブループリント スクリプティング環境でのマップの作成および編集、アイテムのクエリおよび表示、Unreal Engine 4 (UE4) での Blueprint Map の基本的な操作を実行できるようになります。

1. 必要な設定を行う

Blueprint Map を使用する前に、コンテナのコンテンツが表示されるようにプロジェクトを設定する必要があります。

1.  Unreal Project Browser[New Project (新規プロジェクト)] タブから First Person ブループリント プロジェクトを選択し、プロジェクトに ExampleMapProject と名前を付けます。

クリックして拡大

  1. 新規プロジェクトを作成する前に、プロジェクトが以下の設定になっているかを確認します。

クリックして拡大

  1. プロジェクトの コンテンツ ブラウザ から 「Blueprint」 フォルダをダブルクリックします。

クリックして拡大

  1. コンテンツ ブラウザ[Add New (新規追加)] ボタンをクリックして [Create Basic Asset (基本アセットを作成)] ポップアップ メニュー配下の [Blueprint Class] にカーソルを当てます。

クリックして拡大

  1. [Pick Parent Class (親クラスを選択)] メニューが開いたら、TextRender Actor ブループリント クラスを検索するために [All Classes] の矢印をクリックします。

Step1_4.png

  1. 検索バー「TexRenderActor」 と入力して、TextRenderActor ブループリント クラスを選択して [Select (選択)] ボタンをクリックします。

Step1_5.png

  1. この時点で、プロジェクトの コンテンツ ブラウザ には新規作成した TextRender Actor が配置されていることを確認します。この新規アクタに 「DisplayMap」 と名前を付けます。

クリックして拡大

  1. DisplayMap TextRender アクタを Unreal Editor の Perspective (3D) Viewport にドラッグします。

クリックして拡大

  1. DisplayMap の TextRender アクタが選択された状態で、[+ Add Component (コンポーネントを追加)] ボタン ([Details (詳細)] パネルにある) をクリックして 検索バー「Box Collision」 と入力します。

クリックして拡大

  1. Box Collision Component を TextRender アクタに追加したら、新規コンポーネントに Trigger Box と名前を付けます。

クリックして拡大

  1. 次に TextRender コンポーネントを選択して、[Details (詳細)] パネルでアクタの [Transform (トランスフォーム)] を表示します。

クリックして拡大

  1. 以下の値に設定されるように、Display Map アクタの [Transform (トランスフォーム)] を更新します。

Step1_11.png

  1. 次に、Display Map アクタの [Horizontal Alignment (水平アラインメント)] を、Horizonal Alignment のデフォルト値の [Left (左)] 揃えから [Center (中央)] 揃えに変更します。

Step1_12.png

  1. 現在 Trigger Box コンポーネントは [Hidden in Game (インゲームで非表示にする)] がオンになっています。[Details (詳細)] パネルの [Rendering (レンダリング)] メニューにある [Hidden in Game (インゲームで非表示にする)] チェックボックスのチェックを外せば Box Collision コンポーネントをインゲームで表示できます。

Step1_13.png

Box Collision コンポーネントをインゲームで表示すると、トリガーされたイベントを操作する基本ロジックが原因の可能性のある問題のデバッグに便利です。

  1. PIE (Play in Editor) モードに入ると、発射物に Display Map コリジョン ボックスに対するコリジョン反応があることがわかります。この時点で必要なのは、Display Map のコリジョン反応に Map コンテナのコンテンツを表示できるイベントをトリガーさせることのみです。 これを実行するため、[Details (詳細)] パネルにある [Collision] メニューの [Collision Presets (コリジョン プリセット)] ドロップダウン リスト ボックスをクリックして、[Custom...] オプションを選択します。

Step1_14.png

  1. 最後に、以下の値を設定して、[Collision Presets (コリジョン プリセット)] を更新します。

Step1_15.png

このセクションの結果

クリックして拡大

このステップでは、新規プロジェクトを作成し、新規 TextRender アクタも設定しました。これにより、次のステップで作成、編集、表示する Blueprint Map コンテナのコンテンツが表示されます。

2. Blueprint Map を作成して表示する

新規作成したプロジェクトに TextRender アクタを設定できたので、次は Blueprint Map コンテナを作成し、それをインゲームで表示します。

  1. プロジェクトの コンテンツ ブラウザ から Display Set TextRender アクタをダブルクリックして、ブループリント イベントグラフ を開きます。

    クリックしてフルサイズで表示。

  2. 以下の画面が表示されたら、[Open Full Blueprint Editor (フル ブループリント エディタを開く)] リンクをクリックして開始します。

    クリックしてフルサイズで表示。

  3. Display Set TextRender アクタ ブループリントの イベントグラフ が表示されていることを確認します。このイベント グラフで Blueprint Map とその表示ロジックを追加することができます。

    クリックしてフルサイズで表示。

    上記画面が表示されない場合は、[Event Graph (イベント グラフ)] タブをクリックしてアクタのブループリント イベントグラフ エディタを開きます。

    クリックしてフルサイズで表示。

  4. 次に、後で表示するキー/値のペアを格納する Blueprint Map コンテナを作成します。新規の Blueprint Map を作成するには、[My Blueprint] パネルにある [+ Add New] ボタンをクリックしてドロップダウン リストから [Variable (変数)] を選択します。
    Step2_4.png

  5. 新しい変数に「Instruction Map」と名前を付けます。
    Step2_5.png

  6. その変数の横にある ピン タイプ のボタンをクリックします。
    Step2_6.png

  7. 次にドロップダウン リストから変数タイプの [Integer (整数)] を選択します。
    Step2_7.png

  8. [Details (詳細)] パネルの [Variable Type] ドロップダウン リストの横にある、その変数の コンテナ タイプ ボタンをクリックします。
    Step2_8.png

  9. 次にドロップダウン リストから Map コンテナ タイプを選択します。
    Step2_9.png

  10. 次に、Map のキー値のプロパティ タイプを定義します。今、キーは選択した通りの Integer 型になっています。しかし、値は String 変数型ではありません。値を Integer から String へ変更するには、値のプロパティ タイプのドロップダウン リストをクリックします。
    Step2_10.png

  11. ドロップダウン リストから [String] を選択します。
    Step2_11.png

  12. この時点で、それぞれ Integer 型のキーと String 型で構成されるキー/値のペアを作成しました。また、コンテナ内に格納するアイテムを定義する前にブループリントのコンパイルをする必要があることをブループリント グラフから通知されます。[Compile] ボタンをクリックしてコンパイルを開始します。

    クリックしてフルサイズで表示。

    ブループリントをコンパイルすると、コンテナの [Default Value] メッセージがインターフェースに置き換えられ、Map のキーが Interger 型で値が String 型のキー / 値のペアをコンテナに追加できます。

  13. これまでの作業を保存していない場合は、[Save] ボタンをクリックしてすべての作業を保存してください。

    クリックしてフルサイズで表示。

    通常、保存は早い段階で、こまめに行うことをお勧めします

  14. [Details (詳細)] パネルの[Default Value] メニューにある [+] (要素を追加) ボタンをクリックして、キー / 値のペアを新たに定義した Instruction Map コンテナに追加します。

    クリックしてフルサイズで表示。

  15. コンテナの新しいキー/値のペアのキーを「1」、値を「WASD to run」と定義します。

    Step2_15.png

  16. この 2 ステップを繰り返して、Instruction Map コンテナを以下のキー / 値のペアで作成します。

    Step2_16.png

ロジックのスクリプト処理

新規に作成した Blueprint Map のコンテンツを表示するためには、必要なロジックを作成する必要があります。

  1. これでコンテナを定義できたので、Instruction Map 変数をブループリント イベントグラフにドラッグします。

    クリックしてフルサイズで表示。

  2. Instruction Map ドロップダウン リストから [Get (ゲット)] を選択します。

    クリックしてフルサイズで表示。

  3. Instruction Map ノードを引き出して Map Utilities インターフェースから Find ノードを追加します。

    クリックしてフルサイズで表示。

    Map から値を取得する方法はいくつかあります。このチュートリアルのこの部分では、Instruction Map に格納されている関連付けられた値を表示するために integer 型のキーをインクリメントします。

  4. この注意事項を考慮して、[+ Add New (新規追加)] ボタンをクリックし、ドロップダウン リストから [Variable (変数)] を選択します。

    Step2_20.png

  5. その変数の型を Integer に設定し、「Key」と名前を付けます。

    Step2_21.png

  6. Integer 変数の宣言と定義が完了したら、Key をブループリント イベントグラフにドラッグして、ドロップダウン リストから [Get (ゲット)] を選択します。

    クリックしてフルサイズで表示。

  7. Key ノードを引き出して IncrementInt ノードを検索して追加します。

    クリックしてフルサイズで表示。

  8. 次に IncrementInt ノードを Find ノードに接続します。

    クリックしてフルサイズで表示。

    このチュートリアルの目的上、時間関数を使用して Key 変数をインクリメントします。

  9. Event Tick ノードを引き出して、Delay ノードを検索して追加します。

    クリックしてフルサイズで表示。

  10. 遅延時間を 2 秒に設定し、Delay ノードを IncrementInt ノードに接続します。

    クリックしてフルサイズで表示。

  11. Event BeginPlay ノードを引き出して Branch ノードを検索してこのノードに接続します。

    クリックしてフルサイズで表示。

  12. 次に IncrementInt ノードを Branch ノードに接続します。

    クリックしてフルサイズで表示。

  13. 次に Find ノードに属する Boolean 型の戻り値を Branch ノードの Condition ピンに接続します。

    クリックしてフルサイズで表示。

    Map 内でアイテムが見つかった場合、Find ノードは true を返します。Map 内に指定されたキーを使っているアイテムが存在しない場合、Find ノードは false を返します。 |

  14. Branch ノードの True ピンを引き出して、Set Text(TextRender) ノードを検索してこのノードに接続します。

    クリックしてフルサイズで表示。

    ロジックのこのブランチは、コンテナに有効なキー/値のペアがある場合は、コンテナに関連付けられている値を表示することを意味します。

  15. コンテナの値をインゲームで表示するには、Find ノードの 戻り値 のピンを Set Text ノードの Value ピンに接続します。

    クリックしてフルサイズで表示。

  16. 次に、Branch ノードの False ピンを引き出して、Set Text(TextRender) ノードを検索し接続します。

    クリックしてフルサイズで表示。

    ロジックのこのブランチは、コンテナに有効なキー/値のペアがない場合は、他の要素を表示することを意味します。

  17. Branch ノードの Value ピンを引き出して、ToText(string) ノードを検索してこのノードに接続します。

    クリックしてフルサイズで表示。

  18. 次に、「Now, shoot the blocks!」という表示する文字列を定義します。

    クリックしてフルサイズで表示。

  19. 1.完成したスクリプトを確認したら、エディタの Viewport インターフェースに戻る前に [Compile (コンパイル)] ボタンをクリックします。

    クリックしてフルサイズで表示。

  20. エディタの Viewport インターフェースで、[Play (プレイ)] ボタンをクリックして新しく実装したスクリプトの動きを確認します。

    クリックしてフルサイズで表示。

このセクションの結果

このガイドのこのステップでは、新規に作成した Blueprint Map を定義し、コンテナにキー/値のペアを設定し、TextRender アクタのブループリント イベント グラフで作成した基本ロジックのいくつかを使用してそれらの値を表示しました。もう少し高度な操作を学習したい場合は次のステップへ進んでください。キー/値のペアをマップに 追加 して、その後その マップの値を表示する方法を説明します。

3.キーと値を Map に追加する

これまでのステップで、TextRender アクタが Blueprint Map の関連付けられた値を表示するように定義をしました。このステップでは、キー/値のペアを Map に 追加 して、Map のキーと関連付けられた値を結果として表示する方法を説明します。

  1. プロジェクトの コンテンツ ブラウザ から Display Map TextRender アクタをダブルクリックして、ブループリント イベントグラフ を開きます。

    クリックしてフルサイズで表示。

  2. Display Map TextRender アクタのブループリント イベントグラフ が表示されます。ここで、新しくキー / 値のペアを 追加 して、最終的に Map のキーと関連付けられた値を ビューポート に表示します。

    クリックしてフルサイズで表示。

  3. ここで、これから使う Add 演算用に Blueprint Map コンテナを新規作成する必要があります。Instruction Map 変数を右クリックしてドロップダウン リストから [Duplicate] を選択し、新規の Blueprint Map 変数を作成し、「Weapon Inventory Map」と名前を付けます。

    Step3_3.png

  4. 新規作成した Map コンテナが以下のプロパティと一致するようにしてください。キーは String 型、値は Integer 型です

    Step3_4.png

    わかりやすくするため、武器名をキー、その武器が使用できる銃弾数を値にして、Weapon Inventory Blueprint Map コンテナを作成します。

  5. その新しい Blueprint Map を選択すると「Please compile the blueprint(ブループリントをコンパイルしてください)」という [Default Value] メッセージが表示されます。

    クリックしてフルサイズで表示。

  6. [Compile (コンパイル)] ボタンをクリックします。

    クリックしてフルサイズで表示。

  7. ブループリントのコンパイルが完了すると Default Value が表示されなくなり、デフォルトのキー / 値のペアが使用されるようになります。

    クリックしてフルサイズで表示。

  8. この時点で、エディタにより以下の警告も表示されます。

    クリックしてフルサイズで表示。

    キーと値のプロパティがそれぞれ Integer-String 型の Blueprint マップである Weapon Inventory Map を作成するために、キーと値のプロパティがそれぞれ Integer-String 型の Blueprint マップを複製したため、UE4 がこの警告を出しました。複製中、エンジンが Weapon Inventory Map のキー / 値のペアへそれらをコピーしようとして、Instruction Map に属するキー / 値のペアを解析して、Weapon Inventory Map のキー/値のペアにこのキー/値のペアのコピーを試行しました。これが好ましくないビヘイビアでした。

    クリックしてフルサイズで表示。

  9. 次のキー / 値のペアを Weapon Inventory Map コンテナに入力します。

    Step3_9.png

  10. 次に [Compile] ボタンをクリックします。

    クリックしてフルサイズで表示。

  11. Weapon Inventory Map コンテナにキー / 値のペアを正しく入力して、新しい Blueprint Map のキー / 値のプロパティ要件を満たすと、警告が表示されなくなります。

    クリックしてフルサイズで表示。

  12. 新規ロジックを既存のブループリント イベントグラフに追加する前に、Weapon Inventory Map 変数をブループリントにドラッグします。

    クリックしてフルサイズで表示。

ロジックのスクリプト処理

  1. 新規ロジックをビルドするには、Weapon Inventory Map ノードを引き出して Map Utilities インターフェースから Keys ノードを追加します。

    クリックしてフルサイズで表示。

    Keys ノードは、Weapon Inventory Map に存在するすべてのキーの Array を出力します。

  2. Keys ノードに属する To Array 出力を引き出して ForEachLoop ノードを検索して追加します。

    クリックしてフルサイズで表示。

  3. 次に、ForEachLoop ノードに属する Array Element ピンを引き出して Print String ノードを検索して追加します。

    クリックしてフルサイズで表示。

  4. ブループリント グラフ内を右クリックして コンテキスト メニュー を開き、Event ActorBeginOverlap を検索して追加します。

    クリックしてフルサイズで表示。

  5. Event ActorBeginOverlap ノードから Other Actor ピンを引き出して、Cast To FirstPersonProjectile ノードを検索して追加します。

    クリックしてフルサイズで表示。

  6. Cast To FirstPersonProjectile ノードを Keys ノードに接続します。

    クリックしてフルサイズで表示。

マップのキーを表示する

この時点で Play in Editor (PIE) モードになっていると、Display Map Text Render アクタのコリジョン ボックスで発射物を発砲し、Weapon Inventory Map に含まれるキーの配列を表示することができます。

クリックしてフルサイズで表示。

スクリプト処理を終了する

  1. 今度は、キー/値のペアをコンテナに追加します。Weapon Inventory Map 変数をブループリントにドラッグします。

    クリックしてフルサイズで表示。

  2. Weapon Inventory Map 変数を引き出して、Map Utilities インターフェースから Add ノードを追加します。

    クリックしてフルサイズで表示。

  3. 次に、追加したいキー / 値のペアを定義します。キーを「Weapon 6」、値を「60」に定義します。

    クリックしてフルサイズで表示。

  4. Add ノードの Boolean Return Value ピンを引き出して、Branch ノードを検索して追加します。

    クリックしてフルサイズで表示。

  5. 追加したキーを表示する追加の表示ロジックを設定する前に、Weapon Inventory Map 変数をブループリントにドラッグします。

    クリックしてフルサイズで表示。

  6. Weapon Inventory Map 変数を引き出して、Map Utilities インターフェースから Keys ノードを追加します。

    クリックしてフルサイズで表示。

  7. Keys ノードに属する To Array 出力を引き出して ForEachLoop ノードを検索して追加します。

    クリックしてフルサイズで表示。

  8. 次に、ForEachLoop ノードに属する Array Element ピンを引き出して Print String ノードを検索して追加します。

    クリックしてフルサイズで表示。

  9. [Text Color (テキスト カラー)] ボックスをクリックして [Color Picker (カラー ピッカー)] メニューを開きます。

    クリックしてフルサイズで表示。

  10. 色を以下の値に設定します。

    Step3_28.png

  11. 追加した値を表示する表示ロジックも設定しますが、やはりその前に Weapon Inventory Map 変数をブループリントにドラッグします。

    クリックしてフルサイズで表示。

  12. Weapon Inventory Map 変数を引き出して、Map Utilities インターフェースから Values ノードを追加します。

    クリックしてフルサイズで表示。

  13. Values ノードに属する To Array 出力を引き出して ForEachLoop ノードを検索して追加します。

    クリックしてフルサイズで表示。

  14. ForEachLoop ノードに属する Execute Output ピンを引き出して Print String ノードを検索して追加します。

    クリックしてフルサイズで表示。

  15. ForEachLoop ノードに属する Array Element ピンを引き出して Print String ノードに属する In String に接続します。

    クリックしてフルサイズで表示。

  16. [Text Color] ボックスをクリックして [Color Picker] メニューを開きます。

    クリックしてフルサイズで表示。

  17. 色を以下の値に設定します。

    Step3_35.png

  18. Branch ノードの True ピンを Keys に接続します。

    クリックしてフルサイズで表示。

  19. 次に Branch ノードの False ピンを Values に接続します。

    クリックしてフルサイズで表示。

  20. Cast To FirstPersonProjectile ノードの Cast Failed ピンを Add ノードに接続すれば、スクリプトのロジックが完成します。

    クリックしてフルサイズで表示。

  21. 完成したスクリプトを確認したら、[Compile] ボタンをクリックします。

    クリックしてフルサイズで表示。

  22. 最後に、完成したスクリプト全体を確認したら、エディタの Viewport インターフェースに戻る前に [Save] ボタンをクリックします。

    クリックしてフルサイズで表示。

  23. エディタの Viewport インターフェースで、[Play] ボタンをクリックして更新されたスクリプトの動きを確認します。

    クリックしてフルサイズで表示。

最終結果

動画を見ると分かりますが、First Person ProjectileDisplay Set TextRender Actor のコリジョン ボックスに発射されると、元の 5 つのキーが Viewport に出力されます。コリジョン ボックスを通り抜ける時に、キーが追加され、その後で出力されます。コリジョン ボックスを後ろに動かす前に、もう 1 回 First Person Projectile を発射して、2 回目にコリジョン ボックスを通り抜ける時、すべての値の出力が確認できます。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback