
ブループリントの配列 はほどんどのデザイン シナリオで選択されるコンテナです。配列は、複製可能なアイテムの順序付きリストで、デベロッパーに順序付きの柔軟なコンテナを提供します。ただし、アイテムのプールを使用して作業を行うデベロッパーが懸念しているのは、プールに属する各アイテムの順序ではなく、デベロッパーがデータを引き出すプールに属するアイテムの一意性です。このような場合は、Blueprint Set が役立ちます。
このガイドを修了すると、ブループリント スクリプティング環境での Set の作成および編集、アイテムのクエリおよび表示、Unreal Engine 4 (UE4) での Blueprint Sets に対する Intersection (交差)、Union (結合) を含む、基本的な操作を実行できるようになります。
1.必要なセットアップ
Blueprint Set の使用を開始する前に、コンテナのコンテンツが表示されるようにプロジェクトを設定する必要があります。
- [Games] > 「First Person (ファーストパーソン)」テンプレートを使って、以下の設定で新規プロジェクトを作成します。
- [Blueprint (ブループリント)] を有効にする。
- [Maximum Quality] を有効にする。
- [Desktop/Console (デスクトップ/コンソール)] を有効にする。
- [With Starter Content (スターターコンテンツ有り)] を有効にする。
-
プロジェクトに「ExampleSetProject」と名前を付けます。
-
プロジェクトの コンテンツ ブラウザ で「Blueprint」フォルダをダブルクリックします。
クリックしてフルサイズで表示。
-
コンテンツ ブラウザ で[Add New (新規追加)] ボタンをクリックして [Create Basic Asset (基本アセットを作成)] ポップアップ メニュー配下の [Blueprint Class] にカーソルを当てます。
クリックしてフルサイズで表示。
-
[Pick Parent Class (親クラスを選択)] メニューが開いたら、TextRender Actor ブループリント クラスを検索するために [All Classes] の矢印をクリックします。
-
検索バー に
TexRenderActor
と入力して、TextRenderActor ブループリント クラスを選択して [Select (選択)] ボタンをクリックします。 -
この時点で、プロジェクトの コンテンツ ブラウザ には新規作成した TextRender Actor が配置されていることを確認します。この新規アクタに「
DisplaySet
」と名前を付けます。 -
DisplaySet
TextRender アクタを Unreal Editor の Perspective (3D) Viewport にドラッグします。クリックしてフルサイズで表示。
-
DisplaySet TextRender アクタを選択したら、[+ Add Component] ボタン ([Details (詳細)] パネル) をクリックして 検索バー に「
Box Collision
」と入力します。クリックしてフルサイズで表示。
-
Box Collision Component を TextRender アクタに追加したら、新規コンポーネントに「
Trigger Box
」と名前を付けます。 -
次に TextRender コンポーネントを選択して、[Details (詳細)] パネルでアクタの [Transform (トランスフォーム)] を表示します。
-
Display Set アクタの [Transform] を更新して、以下の値に反映させます。
-
次に、Display Set アクタの [Horizontal Alignment (水平アラインメント)] を、デフォルト値の [Left (左)] 揃えから [Center (中央)] 揃えに変更します。
-
現在 Trigger Box コンポーネントは [Hidden in Game (インゲームで非表示にする)] がオンになっています。[Details (詳細)] パネルの [Rendering (レンダリング)] メニューにある [Hidden in Game (インゲームで非表示にする)] チェックボックスのチェックを外せば Box Collision コンポーネントをインゲームで表示できます。
Box Collision コンポーネントをインゲームで表示すると、トリガーされたイベントを操作する基本ロジックが原因の可能性のある問題のデバッグに便利です。
-
PIE (Play in Editor) モードに入ると、発射物に Display Set コリジョン ボックスに対するコリジョン反応があることがわかります。この時点で必要なのは、Display Set コリジョン ボックスに Set コンテナのコンテンツを表示できるイベントをトリガーさせることのみです。これを実行するため、[Details (詳細)] パネルにある [Collision] メニューの [Collision Presets (コリジョン プリセット)] ドロップダウン リスト ボックスをクリックして、[Custom...] オプションを選択します。
-
最後に、以下の値を設定して、[Collision Presets (コリジョン プリセット)] を更新します。
このセクションの結果
クリックしてフルサイズで表示。
新規プロジェクトを作成し、新しい TextRender Actor の設定を行ったので、次のステップで作成、編集、表示する Blueprint Set コンテナのコンテンツが表示されるようになります。
2.Blueprint Set を作成して表示する
新規作成したプロジェクトに TextRender アクタを設定したので、次は Blueprint Set コンテナを作成し、それをインゲームで表示してみましょう。
-
プロジェクトの コンテンツ ブラウザ から Display Set TextRender アクタをダブルクリックして、ブループリント イベントグラフ を開きます。
クリックしてフルサイズで表示。
-
以下の画面が表示されたら、[Open Full Blueprint Editor (フル ブループリント エディタを開く)] リンクをクリックして開始します。
クリックしてフルサイズで表示。
-
Display Set TextRender アクタ ブループリントの イベントグラフ が表示されていることを確認します。このイベント グラフで Blueprint Set とその表示ロジックを追加することができます。
クリックしてフルサイズで表示。
上記画面が表示されない場合は、[Event Graph (イベント グラフ)] タブをクリックしてアクタのブループリント イベントグラフ エディタを開きます。
クリックしてフルサイズで表示。
-
次に、後で表示する複数のアイテムを格納する Blueprint Set コンテナを作成します。新規の Blueprint Set を作成するには、([My Blueprint] パネルにある) [+ Add New] ボタンをクリックしてドロップダウン リストから [Variable (変数)] を選択します。
クリックしてフルサイズで表示。
-
新しい変数に「
Instruction Set
」と名前を付けます -
その変数の横にある ピン タイプ のボタンをクリックします。
-
次にドロップダウン リストから [String (文字列)] 変数型を選択します。
-
[Details (詳細)] パネルの [Variable Type] ドロップダウン リストの横にある、その変数の コンテナ タイプ ボタンをクリックします。
クリックしてフルサイズで表示。
-
次にドロップダウン リストから Set コンテナ タイプを選択します。
-
この時点で、コンテナ内に格納するアイテムを定義する前にブループリントのコンパイルをする必要があることをブループリント グラフから通知されます。そのまま [Compile] ボタンをクリックします。
クリックしてフルサイズで表示。
ブループリントをコンパイルすると、コンテナの [Default Value] メッセージがインターフェースに置き換えられ、String 型のユニークなアイテム (または要素) でコンテナを追加することができるようになります。
-
これまでの作業を保存していない場合は、[Save] ボタンをクリックしてすべての作業を保存してください。
クリックしてフルサイズで表示。
通常、保存は早い段階で、こまめに行うことをお勧めします
-
[Details (詳細)] パネルの[Default Value] メニューにある [+] (要素を追加) ボタンをクリックして、String 型のアイテムを新たに定義した Instruction Set コンテナに追加します。
クリックしてフルサイズで表示。
-
コンテナの新規アイテムを「
Click
」として定義します。 -
この 2 ステップを繰り返して、Instruction Set コンテナを以下のキー / 値のペアで作成します。
ロジックのスクリプトを作成する
新しく作成した Blueprint Set のコンテンツを表示する前に、必要なロジックを書かなければなりません。
-
これでコンテナを定義できたので、Instruction Set 変数をブループリント イベントグラフにドラッグします。
クリックしてフルサイズで表示。
-
Instruction Set ドロップダウン リストから [Get (ゲット)] を選択します。
クリックしてフルサイズで表示。
-
Instruction Set ノードを引き出して Map Utilities インターフェースから Find ノードを追加します。
-
To Array ノードを引き出して Get ノードに接続します。
何通りかの方法で Set からアイテムを取得することができます。特定のキーで Set を照会する方法やセット内のアイテムを介してイタレートする方法です。ここでは、Instruction Set を介してイタレートするためにカウンタ変数を使用します。
-
この注意事項を考慮して、[+ Add New (新規追加)] ボタンをクリックし、ドロップダウン リストから [Variable (変数)] を選択します。
クリックしてフルサイズで表示。
-
その変数の型を Integer に設定し、「
Counter
」と名前を付けます。 -
Integer 変数の宣言と定義が完了したら、Counter をブループリント イベントグラフにドラッグして、ドロップダウン リストから [Get (ゲット)] を選択します。
クリックしてフルサイズで表示。
-
Counter ノードを引き出して IncrementInt ノードを検索して追加します。
クリックしてフルサイズで表示。
-
次に IncrementInt ノードを Get ノードに接続します。
このチュートリアルの目的上、時間関数を使用して Counter 変数をインクリメントします。
-
Event Tick ノードを引き出して、Delay ノードを検索して追加します。
-
遅延時間を 2 秒に設定し、Delay ノードを IncrementInt ノードに接続します。
-
Event BeginPlay ノードを To Array ノードに追加します。
-
この時点で To Array ノードを引き出して Set Text ノードを検索してこのノードに接続し、コンテナのコンテンツをインゲームで表示します。
-
Get ノードを [Value (値)] ピン (Set Text ノードにある) に接続します。
-
IncrementInt ノードを Set Text ノードに接続します。
-
完成したスクリプトを確認したら、エディタの Viewport インターフェースに戻る前に [Compile (コンパイル)] ボタンをクリックします。
クリックしてフルサイズで表示。
-
エディタの Viewport インターフェースで、[Play (プレイ)] ボタンをクリックして新しく実装したスクリプトの動きを確認します。
このセクションの結果
このガイドのこのステップでは、新しい Blueprint Set を定義し、コンテナに複数のアイテムを設定し、TextRender アクタのブループリント イベント グラフで作成した基本ロジックのいくつかを使用してそれらのアイテムを表示しました。もう少し高度な操作を学習したい場合は次のステップへ進んでください。2 つの Blueprint Set の Intersection (交差) の実行方法を学習します。
3.Intersection (交差) を実行する
TextRender アクタが前のステップで定義した Blueprint Map のコンテンツを表示するようになっています。このステップでは、2 つの Blueprint Set の Intersection (交差) を実行し、最終的にゲームの ビューポート にその Intersection (交差) の結果を出力します。
-
プロジェクトの コンテンツ ブラウザ から Display Set TextRender アクタをダブルクリックして、ブループリント イベントグラフ を開きます。
クリックしてフルサイズで表示。
-
Display Set TextRender アクタのブループリント イベントグラフ が表示されていることを確認します。このイベント グラフで既存の Instruction Set を使用して新規の Blueprint Set を Intersect に追加して、最後に Resultant Set を ビューポート に表示します。
クリックしてフルサイズで表示。
-
この時点では、これから行う Intersection (交差) 用に複数の Blueprint Set コンテナを作成する必要があります。Instruction Set 変数を右クリックして、ドロップダウン リストから Duplicate を選択して新規 Blueprint Set を 2 つ作成して、それぞれに「
Shorter Instruction Set
」と「Resultant Instruction Set
」と名前を付けます。2 つの Set (通常) で Intersection (交差) を実行すると、2 つの Set に共通するアイテムのみが含まれる Resultant Set が発生します。
-
この時点で、既存の Instruction Set 変数から複製した、新しい Blueprint Set 変数が 2 つあることを確認します。その新しい Blueprint Set のいずれか (Resultant Instruction Set) を選択すると、「
Please compile the blueprint
(ブループリントをコンパイルしてください)」という [Default Value] メッセージが表示されます。クリックしてフルサイズで表示。
-
[Compile] ボタンをクリックします。
クリックしてフルサイズで表示。
-
ブループリントのコンパイルを完了すると [Default Value (デフォルト値)] メッセージが表示されなくなり、複数の既存要素が使用されるようになります。お分かりのように、この 2 つの新しい変数は、既存の Instruction Set 変数を複製して作成されたため、複製元の Blueprint Set に入っていたエレメントが新規に作成されたコンテナに複製されています。
なお、新規の変数は、既存変数を複製する必要なく作成できます。
-
Resultant Instruction Set を消去するには、[Default Value] メニューにある Removes all items ボタンをクリックします。
クリックしてフルサイズで表示。
-
Shorter Instruction Set からアイテム (または要素) を消去します。
クリックしてフルサイズで表示。
-
新規ロジックを既存のブループリント イベントグラフに追加する前に、Shorter Instruction Set 変数と Instruction Set 変数をブループリントにドラッグします。
クリックしてフルサイズで表示。
ロジックのスクリプトを作成する
-
新規ロジックをビルドするには、Shorter Instruction Set ノードを引き出して Set Utilities インターフェースから Intersection ノードを追加します。
-
次に、Instruction Set ノードを Intersection ノードに接続します。
-
ブループリント グラフ内を右クリックして コンテキスト メニュー を開き、Event ActorBeginOverlap を検索して追加します。
-
Event ActorBeginOverlap ノードから Other Actor ピンを引き出して、Cast To FirstPersonProjectile ノードを検索して追加します。
-
Cast To FirstPersonProjectile ノードを Intersection ノードに接続します。
基本的に、First Person Projectile はアクタのコリジョン ボックスと正常に衝突すると、Intersection ノードを呼び出します。
-
Intersection ノードが Shorter Instruction Set と Instruction Set 上で演算を実行した後、その結果を Resultant Instruction Set コンテナに格納します。そのためには、Intersection ノードを引き出して Set Resultant Instruction Set ノードを追加します。
-
Set Resultant Instruction Set ノードを引き出して Set Utilities インターフェースから To Array ノードを追加します。
-
Array の要素を繰り返し処理するには、To Array ノードを引き出して ForEachLoop ノードを追加します。
-
To Array ノード と ForEachLoop ノードを接続します。
-
Intersection の結果を Viewport に出力することができます。そのためには、ForEachLoop ノードの Array Element ピンを引き出して Print String ノードを検索して追加します。
-
ForEachLoop ノードを Print String ノードに接続します。
-
この段階で Resultant Instruction Set に何を含むかを決めることができます。例えば、Resultant Instruction Set 変数に
Click
、Left
、Mouse
、Button
のみが含まれるようにしましょう。まず最初に、紙ベースで Intersection (交差) を実行します。命令セット 短縮命令セット 結果として得られる命令セット (A ∩ B) Click Click Click the Left Left Left Mouse Mouse Mouse Button Button Button and Fire 今実行した紙ベースでの実行で分かるように、Instruction Set と Shorter Instruction Set の両方に共通したアイテムは Resultant Set コンテナに格納されます。Set で論理演算を実行する場合は、まず演算を紙 (またはホワイトボード) に書き出してから、ブループリント グラフでロジックのスクリプトを作成することをお勧めします。
-
これで、Shorter Instruction Set コンテナに格納するアイテムがわかったので、Shorter Instruction Set を選択してコンテナのコンテンツを調べます。
クリックしてフルサイズで表示。
画像の黄色の枠の部分からわかるように、Shorter Instruction Set は現在空です。この時点で Instruction Set を使って Shorter Instruction Set を実行すると Resultant Instruction Set コンテナは空になります。
-
Shorter Instruction Set コンテナに次の要素を設定します。
-
完成したスクリプトを確認したら、[Compile] ボタンをクリックします。
クリックしてフルサイズで表示。
-
最後に、完成したスクリプト全体を確認したら、エディタの Viewport インターフェースに戻る前に [Save] ボタンをクリックします。
クリックしてフルサイズで表示。
-
エディタの Viewport インターフェースで、[Play] ボタンをクリックして更新されたスクリプトの動きを確認します。
クリックしてフルサイズで表示。
このセクションの結果
動画を見ると分かりますが、First Person Projectile が Display Set コリジョン ボックスと衝突すると、Resultant Instruction Set のコンテンツが Viewport に出力されます。出力されたアイテムを見ると Resultant Instruction Set の中にあるアイテムの順序は予測できません。これは Blueprint Set の属性です。次のステップでは、2 つの Blueprint Set で Union (結合) を実行する方法を説明します。
4.Union (結合) を実行する
チュートリアルの最後のステップです。2 つの Blueprint Set の Union を実行し、最終的にゲームの ビューポート に出力します。
-
プロジェクトの コンテンツ ブラウザ から Display Set TextRender アクタをダブルクリックして、ブループリント イベントグラフ を開きます。
クリックしてフルサイズで表示。
-
この時点では、これから行う Union (結合) 用に新しい Blueprint Set コンテナを作成する必要があります。Shorter Instruction Set 変数を右クリックしてドロップダウン リストから [Duplicate] を選択し、新規の Blueprint Set 変数を作成し、「
Longer Instruction Set
」と名前を付けます。 -
次に、[Compile (コンパイル)] ボタンをクリックします。
クリックしてフルサイズで表示。
-
[Removes all items (すべてのアイテムを除去する)] ボタンをクリックして Longer Instruction Set からすべてのアイテムを消去します。
クリックしてフルサイズで表示。
-
以下のアイテムを新しい Longer Instruction Set コンテナに追加します。
-
Longer Instruction Set 変数と Instruction Set 変数をブループリント グラフにドラッグします。
クリックしてフルサイズで表示。
ロジックのスクリプトを作成する
-
新規ロジックをビルドするには、Longer Instruction Set ノードを引き出して Set Utilities インターフェースから Union ノードを追加します。
-
Instruction Set ノードを Union ノードに接続します。
-
Cast To FirstPersonProjectile ノードの Cast Failed を Union ノードに接続します。
-
Union ノードを引き出して To Array ノードを検索して追加します。
-
To Array ノードを引き出して ForEachLoop ノードを検索して追加します。
-
To Array ノード と ForEachLoop ノードを接続します。
-
これで、Union の結果を Viewport に出力することができます。そのためには、ForEachLoop ノードの Array Element ピンを引き出して Print String ノードを検索して追加します。
-
ForEachLoop ノードを Print String ノードに接続します。
-
デバッグ メッセージが出力されているので、ビューポート に出力されるテキストの色を変更する必要があります。Print String ノードの下にあるメニュー展開矢印をクリックします。
-
[Text Color (テキスト カラー)] ボックスをクリックして [Color Picker (カラー ピッカー)] メニューを開きます。
-
色を以下の値に設定します。
-
次に、[Compile (コンパイル)] ボタンをクリックします。
クリックしてフルサイズで表示。
-
完成したスクリプトを確認したら、エディタの Viewport インターフェースに戻る前に [Save] ボタンをクリックします。
クリックしてフルサイズで表示。
-
エディタの Viewport インターフェースで、[Play] ボタンをクリックして更新されたスクリプトの動きを確認します。
クリックしてフルサイズで表示。
最終結果
動画を見ると分かりますが、First Person Character が Display Set コリジョン ボックスと衝突すると、Union のコンテンツが Viewport に出力されます。出力されたアイテムを見ると、ここでもまたアイテムの順序は予測できないことが分かります。これは Blueprint Set の属性です。。なお、2 つの Blueprint Set の Union (結合) 演算を紙ベースで実行すると、以下のような結果が得られます。
命令セット | 完全な命令セット | 結果出力 (A ∪ B) |
---|---|---|
Click | your | Click |
the | Gun | the |
Left | Left | |
Mouse | Mouse | |
Button | Button | |
and | and | |
Fire | Fire | |
your | ||
Gun |