マップを使用する

ブループリントでマップを使用する方法を説明します。

Windows
MacOS
Linux

workingWithMaps_topicBanner.png

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

1.必要な設定を行う

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

  1. [Games] > 「First Person (ファーストパーソン)」テンプレートを使って、以下の設定で新規プロジェクトを作成します。

    • [Blueprint (ブループリント)] を有効にする。

    • [Maximum Quality] を有効にする。

    • [Desktop/Console (デスクトップ/コンソール)] を有効にする。

    • [With Starter Content (スターターコンテンツ有り)] を有効にする。

  2. プロジェクトに「ExampleMapProject」と名前を付けます。

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

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

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

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

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

    Step1_4.png

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

    Step1_5.png

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

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

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

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

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

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

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

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

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

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

  12. Display Set アクタの [Transform] を更新して、以下の値に反映させます。

    Step1_11.png

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

    Step1_12.png

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

    Step1_13.png

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

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

    Step1_14.png

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

    Step1_15.png

このセクションの結果

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

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

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

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

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

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

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

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

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

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

    Step2_3Note.png

  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 コンテナに追加します。

    Step2_14.png

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

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

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

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

このセクションの結果

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

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

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

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

  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 が表示されなくなります。+ (要素を追加) ボタンをクリックして、単一のキー値ペアを追加します。

    Step3_7.png

    Step3_7a.png

  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 変数をブループリントにドラッグして、ドロップダウン メニューから Get を選択します。

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

ロジックのスクリプトを作成する

  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」に定義します。

    Step3_21.png

  4. Add ノードの出力ピンを引き出して、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 つのキーが ビューポート に出力されます。コリジョン ボックスを通り抜ける時に、キーが追加され、その後で出力されます。コリジョン ボックスを後ろに動かす前に、もう 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