Variant Manager の概要

Variant Manager とその仕組みについて説明します。

Windows
MacOS
Linux

Variant Manager は、レベル内のアクタの異なるコンフィギュレーションを複数設定するための Unreal Editor の特殊な UI パネルです。それぞれのコンフィギュレーションは 「バリアント」 と呼ばれます。Variant Manager では次の操作が可能です。

  • これらのバリアントを設定する

  • バリアントを Variant Sets (バリアント セット) と呼ばれるカテゴリにまとめる

  • それぞれのバリアントでどのアクタ プロパティを制御するか、またはどの関数を呼び出すかを定義する

  • Unreal Editor でさまざまなバリアントを有効にする (切り替える)

Variant Manager を使用するには、プロジェクトで [Editor] > [Variant Manager] プライグインを有効にしておく必要があります。

Architecture, Engineering, and Construction または Automotive, Manufacturing, and Product Design カテゴリのいずれかのテンプレートから開始した場合は、このプラグインがデフォルトですでに有効になっていることがあります。

Variant Manager パネル

Variant Manager の画面は、Level Variant Sets アセットと呼ばれる特殊なタイプのアセット向けのエディタと捉えることができます。Level Variant Sets アセットをダブルクリックすると Variant Manager パネルが開き、このアセットで管理されているバリアントの設定や操作が可能になります。

Variant Manager の画面は 4 つの列で構成されています。

  1. Variants (バリアント) 列: 左側のパネルには、この Level Variant Sets アセットで管理されているバリアントとバリアント セットがすべて表示されます。例えば、上の画像には、[Paint][Brake Caliper] という 2 つのバリアント セットが表示されています。これらのバリアント セットには複数のバリアントが含まれています。上の画像には、[Blue][Red][Yellow][Black][Dark Grey] の塗装色のバリアントと、[Red] のブレーキ キャリパーのバリアントが表示されています。

  2. Actors (アクタ) 列 一番左側の列でバリアントを選択している場合、2 列目の [Actors] にはそのバリアントに バインド されているすべてのアクタが表示されます。上の画像では [Paint] > [Red] バリアントを選択しているため、[Actors] には、バイクのボディの塗装されたすべてのパーツの Static Mesh アクタが表示されています。

    アクタとバリアント間を バインド するということは、これらの間にリンクを作成することを意味します。そのバリアントを有効にすると、それにバインドされたアクタが反応して、データ プロパティの値を変更するか、関数を呼び出します。

  3. Properties (プロパティ) 列: バインドされたアクタを 2 つ目の列で 1 つまたは複数選択している場合、3 列目の [Properties] には、このバリアント内のこれらのアクタの キャプチャされた プロパティが表示されます。上の画像では、Material[0]Material[1] プロパティがキャプチャされています。これらのマテリアルによってサーフェスの可視の塗装色が決まります。

    アクタのプロパティを キャプチャ するということは、そのプロパティに対する希望の値をバリアントに保存することを意味します。

  4. Values (値) 列: 一番右の [Values] 列には、[Properties] 列に表示されている各プロパティの、バリアントに保存されている値が表示されます。この例では、[Red] バリアントが有効に切り替わった際に、Variant Manager によって、バインドされているアクタの Material[0] プロパティが赤色の車塗装マテリアルに設定されます。

バリアントを設定する

通常、シーン バリアントを設定する際の全体的なワークフローは、上記の 4 列を左から右に順に設定していく流れと同じです。

  1. シーン内で必要なバリアントを確認して、それらのバリアントをバリアント セットに分類する方法を決定します。これらの決定に基づいて、左側の列で使用可能なコントロールを使って、これらの同じバリアント セットとバリアントで Variant Manager を設定します。

    このパネル内のコントロール (ほとんどの場合は右クリックしてコンテキスト メニューから選択) を使って、新しいバリアント セットとバリアントの追加、バリアント セット間のバリアントの移動、バリアント セットとバリアントの名前変更、バリアントへのサムネイルの割り当て、必要のないバリアントとバリアント セットの削除を行うことができます。

  2. 前の手順で作成したそれぞれのバリアントに、1 つまたは複数のアクタをバインドします。

    新しいバリアントを [World Outliner (アウトライナ)] パネルから、バインドされたアクタのリストまたは左側のバリアントの列にドラッグすることで、バリアントをアクタにバインドできます。また、[Actors] パネルでリストを右クリックしてコンテキスト メニューを使用して、アクタをバインドまたはバインド解除することもできます。

  3. バインドされたそれぞれのアクタで、Variant Manager で変更するプロパティを選択できます。

    新しいアクタをバインドするごとに Variant Manager によって自動的にウィンドウが開かれて、キャプチャするプロパティを選択するよう促されます。例:

    Choose properties to capture

    ブループリントに公開されているあらゆるプロパティをキャプチャすることができます。バンドしたアクタがブループリント アクタの場合は、クラスで作成し、「Instance Editable」 (インスタンス編集可能) としてマークした変数が含まれます。

    また、バインドしたアクタを右クリックして追加のプロパティをキャプチャしたり、キャプチャしたプロパティを右クリックしてリストから削除したりすることもできます。

    バインドしたアクタで公開されている関数をバリアントのアクティベーション時に呼び出すよう Variant Manager を設定することもできます。この設定の詳細については、「バリアントのアクティベーション時に関数を呼び出す」 を参照してください。

  4. それぞれのプロパティで、バリアントのアクティベーション時に Variant Manager で適用させる値を設定します。

    キャプチャした値は、Variant Manager の [Values] 列で直接編集することで、いつでも設定することができます。また、Unreal Editor の別のセクションでプロパティ値を変更し、次のいずれかの操作を行って、保存した値をそのプロパティの現在の値に一致するよう更新することもできます。

    • プロパティ値の隣にある [Record the current value (現在の値を記録)] アイコンをクリックします。

      Record the Current Value icon

    • プロパティまたはキャプチャした値を右クリックして、コンテキスト メニューの [Record Current Value (現在の値を記録)] を選択します。

      Record Current Value

    すでに有効に切り替えたバリアントの [Values] 列で、キャプチャした値を直接更新した場合、この変更はすぐにはレベル ビューポートに反映されません。変更を反映するには、もう一度バリアントを有効に切り替える必要があります。または、プロパティまたはキャプチャした値のいずれかを右クリックして、コンテキスト メニューの [Apply Recorded Value (記録した値を適用)] を選択します。

    Apply Recorded Value

Datasmith を使用して、Autodesk VRED や 3DExcite Deltagen など、バリアントの設定をサポートするサードパーティ アプリケーションからシーンをインポートする場合、ソース シーン内ですでにバリアントが設定済みであれば、Datasmith によって自動的に Level Variant Sets アセットとアクタが設定されます。この場合、開発者が行うべきは、ユーザーのインタラクションに応じてバリアントを有効に切り替えるブループリント ロジックまたは UMG ウィジェットをプロジェクト内に作成することのみです。

自動バインディングとキャプチャリング

前のセクションで紹介したアプローチでアクタのプロパティを一つずつバインディングする代わりに、レベル内でアクタを変更しながら、これらのアクタを自動的にバインドして、そのプロパティをキャプチャすることもできます。

自動バインディングとキャプチャリングを切り替えるには、Variant Manager 画面左側の バリアント の列の上にある切り替えボタンを使用します。

Auto-capture disabled

Auto-capture enabled

自動キャプチャが無効

自動キャプチャが有効

自動キャプチャリングが有効な場合は、レベル内のアクタに対するすべての変更が Variant Manager によってリッスンされます。Variant Manager でキャプチャ可能なプロパティを変更すると、変更されたプロパティの新しい値が自動的にキャプチャされて、現在選択しているバリアントに保存されます。現在選択しているバリアントは、一番左側の列でオレンジ色でハイライトされているバリアントです。

変更を加えたアクタが、選択しているバリアントにバインドされていない場合は、自動的にバインドされます。通常の手順は次のとおりです。

  1. 画面左側の [Variants (バリアント)] 列で、変更するバリアントをクリックして選択します。変更を加える前にバリアントの現在の状態を有効に切り替えるには、目的のバリアントをダブルクリックします。

  2. 自動キャプチャのボタンをクリックして、有効な状態に切り替えます。

  3. バリアントにバインドするよう選択したアクタに変更を加えます。変更に伴い、Variant Manager によって変更されたすべてのアクタが自動的にバインドされ、設定したすべての新しいプロパティ値がキャプチャされます。

  4. バリアントが希望どおりに設定されたら、次のいずれかを行います。

    • 画面左側の [Variants (バリアント)] 列で、別のバリアントをクリックまたはダブルクリックして、引き続きバリアントのプロパティをキャプチャする。

    • 自動キャプチャのボタンをクリックして無効の状態に戻し、変更のキャプチャを終了する。

自動キャプチャ モードの状態には常に注意してください。レベル内で作業する際に自動キャプチャ モードが有効であることを忘れてしまった場合、現在選択しているバリアントに不要な変更が誤って記録されてしまう危険性があります。

エディタ内でバリアントを有効にする

ランタイムまたは Unreal Editor 内でバリアントを有効にした場合、Variant Manager により、そのバリアントにバインドされているすべてのアクタに対して繰り返し処理が行われます。これらのアクタで、キャプチャされたすべてのプロパティが、バリアントに保存された値に設定されます。また、バインドされているアクタで呼び出すよう設定した関数も呼び出されます。

Variant Manager の画面が開いていれば、Unreal Editor 内でバリアントを有効にできます。次のいずれかの手順で有効にできます。

  • 画面の一番左側の列で、有効にするバリアントをダブルクリックする。

  • 画面の一番左側の列で、有効にするバリアントを右クリックしてコンテキスト メニューの [Switch On (有効に切り替え)] を選択します。

    Switch On

Variant Manager では、有効になっているバリアントが小さなインジケーターで示されます。つまり、キャプチャされたプロパティが、レベル内のバインドされているアクタに現在適用されている値とすべて一致するバリアントが示されます。バリアントを有効に切り替えた際、また、レベル内で同じプロパティ値を手動で設定した場合にインジケーターが切り替わります。

Deactivated Variant

Activated Variant

無効なバリアント

有効なバリアント

ランタイムでのバリアントの有効化については、後述の 「ランタイム ブループリントAPI」 を参照してください。

Level Variant Sets アセットとアクタについて

それぞれの Level Variant Sets アセットには、特定のレベル内に存在するアクタに関する情報が保存されています。そのレベルを Unreal Editor で開いている場合は、Variant Manager の画面を通じてさまざまなバリアントを有効にできます。有効にすると、Unreal Editor 内で、バインドされているアクタによって、キャプチャされたプロパティの値がすぐに更新されます。

バリアントを Unreal Editor 内でのみ有効にする場合 (ランタイムでは有効にしない) は、設定する必要があるのは Level Variant Sets アセットのみです。

ただし、パッケージ化されたプロジェクトでは、ランタイムでのバリアントが最も有用です。例えば、Unreal Engine レベル内に、さまざまなトリムを表す複数のバリアントが含まれる 150% BOM モデルの車があるとします。この場合、これらのトリム オプションをエディタ内で切り替えることができるのは便利ですが、エンド ユーザーがトリムを選択できる車コンフィギュレータを作成することが目的であれば、エンド ユーザーによってランタイムで制御可能なバリアントにする必要があります。

こうするには、レベル内に Level Variant Sets アセットをドラッグする必要があります。これによって新しい Level Variant Sets アクタが、その作成に使用したアセットにリンクされたレベル内に作成されます。この特殊なアクタでは、ブループリント ゲームプレイ ロジックのバリアントの操作に使用可能なブループリント インターフェースと、プロジェクトで作成する UMG インターフェースが提供されます。

Level Variants Sets アセットは、単一のレベル内でのみアクタと機能します。別のレベルを開いても、そのレベル内では Variant Manager はオブジェクトに影響を与えません。

複数の異なるレベル内でアクタを制御する必要がある場合は、それぞれのレベルに対して異なる Level Variant Sets アセットを作成し、これらを別々に設定する必要があります。または、これらで同じアクタを同じように制御する場合は、Level Variants Sets アセットで制御する必要のあるすべてのアクタを単一のサブレベルに配置し、これらのバリアントを必要とする両方のレベルにこのサブレベルを追加します。

ランタイム ブループリント API

Level Variant Sets アクタでは、ランタイムでのバリアントおよびバリアント セットの操作に使用可能なブループリント API が提供されます。この API の主な使用目的は次のとおりです。

バリアントを有効にする

バリアントとその親であるバリアント セットの名前またはインデックス値のいずれかが判明していれば、Level Variant Set に含まれているあらゆるバリアントを有効に切り替えることができます。

バリアントを有効に切り替える最もシンプルな方法は、Level Variant Set アクタへの参照からドラッグして Level Variant Sets カテゴリを見つけ、[Switch On Variant By Index] または [Switch On Variant By Name] を選択する方法です。

Switch on a Variant by index or by name

バリアント データにアクセスする

Variant Manager で設定したすべてのバリアントとバリアント セットの構造にアクセスすることができます。

  1. Level Variant Set アクタへの参照からドラッグして Level Variant Sets カテゴリを見つけ、[Get Level Variant Sets] を選択します。

    Get Level Variant Sets

  2. Level Variant Sets アセットへの参照が確立したら、アセットに設定されているバリアント セットにアクセスするために、[Return Value] ポートからドラッグして [Level Variant Sets] を見つけます。

    Access the Variant Sets

    Get Variant Set ノード、または Get Variant Set By Name ノードを使用して、インデックスまたは名前を使ってバリアント セットを取得します。Get Num Variant Sets は、Level Variant Sets アセットで設定されているバリアント セットの合計数を返します。これを Get Variant Set ノードと組み合わせて、すべてのバリアント セットをループスルーして処理することができます。

  3. バリアント セットへの参照を取得したら、バリアント セットに含まれるデータを操作するために、その Return Value からドラッグして Variant Set カテゴリを見つけます。

    Access data in the Variant Set

    Get Display Text] ノードでは、Variant Manager の画面でバリアント セットに設定した名前を取得できます。

    バリアント セット自体へのアクセスに使用したものと同じ一連のノードを使用して、バリアント セット内のバリアントにアクセスすることもできます。Get Variant ノード、または Get Variant By Name ノードを使用して、インデックスまたは名前を使ってバリアント セットを取得します。Get Num Variants は、このバリアント セットで設定されているバリアントの合計数を返します。これを Get Variant ノードと組み合わせて、前述のバリアント セットのループスルーと同様に、バリアント セットに含まれるすべてのバリアントをループスルーして処理できます。

  4. バリアントへの参照を取得したら、その Return Value ポートからドラッグして Variant カテゴリを見つけ、表示名を取得したり、有効に切り替えたり、バインドされているアクタにアクセスしたりすることができます。

    Access data in the Variant

このブループリント グラフの例では、上記のアプローチを使用して、設定されているすべてのバリアントとバリアント セットに対して処理を反復します。これにより、各バリアントとバリアント セットの名前が順番に画面とログに出力されます。

Copy Node Graph

バリアントとバリアント セットに対する反復処理と同様のアプローチを使用して、異なる処理を行うこともできます。全般的な UMG の知識とアイデアを活用して、この情報に基づいて、Level Variant Sets アセットで設定したバリアントとバリアント セットを反映する UI ウィジェットを自動的に作成する UI システムを構築することができます。

ブループリントでの作業に関する背景情報については、「ブループリント ビジュアル スクリプティング」 を参照してください。UMG でのユーザー インターフェースの作成については、UMG UI デザイナーのドキュメント を参照してください。

資料提供

このページで使用されている車のモデルは Allegorithmic のご好意によるものです。

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信