今から始めるLevelVariant

# はじめに
この記事は[Unreal Engine (UE) Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ue)の７日目の記事です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/VHQdS3QnMow?si=NtD_-XKqHjLaGo3A" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

コンフィギュレーターとかに便利なレベルバリアントがじわじわUIとか改装されて使いやすくなっているので取り上げようと思いました。ちょっとしたレイアウト変更とかmaterialの変更に便利。

環境

UE5.4
Windows11
# LevelVariantって？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/5ca54293-fae5-3dae-c2fb-a596c0a44c3e.png)

LevelVariantはマップ上に配置されているActorの状態を記録して遷移させることができる仕組みです。
概ね詳細タブに出るものは記録することができます。
[シーンバリアントマネージャーの概要](https://dev.epicgames.com/documentation/en-us/unreal-engine/working-with-scene-variants-in-unreal-engine?application_version=5.4)

# Level Variant操作画面
レベルバリアントで操作する部分は主に６つに分かれています
![Menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/64957058-57b7-840a-6b1e-9fefd6aeab1c.png)

①…バリアントセットを追加する
②…バリアントパネル。バリアントセットにバリアントを追加する。有効なレベルバリアントを切り替える。
③…アクターパネル。このバリアントで操作するActorを選ぶ
④…プロパティパネル。操作するActorの中のParameterの詳細
⑤…依存関係パネル。そのバリアントを有効にするときに別のバリアントセットの有効なバリアントを変更できる。
⑥…自動キャプチャ。バリアントに追加されているActorでプロパティパネルに追加されているパラメーターがレベル上で変更されたとき、自動的に更新される。

# Level Variantの作り方/仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/89f7f4d2-c1d8-f57e-ff1b-350786cbd80a.png)
Level Variantは、バリアントセットという一つの固まりにバリアントという差分が複数入っている構造をしています。
上の画像では、
・bodyのスタティックメッシュを変更するバリアントセット
　-差分　ストラト
　-差分　Iタイプ
  -差分　Vタイプ

・bodyのMaterialを変更するバリアントセット
　-差分　黒
　-差分　青
　-差分　緑
　-差分　ピンク
　-差分　赤

 という構造になっていて、現在はストラトに黒のマテリアルが有効になっています。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/a5629e9f-e3b4-abb6-7c19-d32c768ed0a5.png)

![UEConfigurator - Unreal Editor 2024-12-06 23-46-39.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/8ef2c162-75f3-9843-a00d-aee6fc7a1981.gif)
Level Variantはバリアントの左の●をクリックすることで有効なものを切り替えることができます。

### 自作バリアントを作る
#### レベルバリアントセットを作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/094cdd77-3244-82ee-7c8f-167ec3ee361d.png)
LevelVariantは、コンテンツブラウザを右クリックし、その他のレベルバリアントセットから作成することができます。

#### バリアント・バリアントセットを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/1a793105-03bc-0d9b-b0cc-256147f99fb1.png)
バリアントセットは左上の「+バリアントセット」を押すことで新しく作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/47431638-a97e-e048-84cd-b80285c018a8.png)
バリアントセットの「+」マークを押すことで新しいバリアントを追加することができます。

#### バリアントで操作するActorを選ぶ

![スクリーンショット 2024-12-06 235405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/34bfcc43-1402-30fd-e54e-9d2e078e0cb9.png)
バリアントを選択した状態で、アクターパネルから「+」を押すことで追加するActorを選ぶことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9f1b811d-c148-f6a3-0eae-31efecc192a2.png)
アウトライナーから選択してD&Dすることでも追加することができます。

#### バリアントで操作するパラメーターをプロパティパネルに追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/259eb8ca-2835-3342-5193-a6bdd4f6cebf.png)
プロパティパネルの「+」を押すか、アウトライナーからアクタパネルに直接D＆Dすることで新しいプロパティの追加パネルを表示させることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/617b2341-a2e0-127b-359b-925c0295fa89.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/1a0a051d-62db-ebe7-dcc8-416491ecda15.png)

プロパティパネルから追加したパラメーターを操作することができます。

![UEConfigurator - Unreal Editor 2024-12-07 00-07-56 (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/94b7b0ab-6c8b-0e27-a82c-83711f2b3c97.gif)

右上の「自動キャプチャ」を有効にすることで、レベル上で変更したパラメーターを自動的に選択したバリアントに反映させることができます。

#### 依存関係を追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/2c200a9f-9710-63c8-2f13-c25ddeaf6bf2.png)
依存関係は依存関係パネルの右上の「+」ボタンを押すことで追加することができます。

依存関係パネルでは例えば
「Bodyのバリアントセットのストラトが有効なバリアントの時、カラーをピンクにしたい」といったことが可能になります。

![UEConfigurator - Unreal Editor 2024-12-07 00-14-38.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/055821d7-c1f0-5596-d605-2ab6d742a6bd.gif)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/330952aa-6c4e-2136-4e21-8d25026a14eb.png)
バリアントセットのドロップダウンから有効にしたいもののバリアントセットを選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/88d8e77e-29f2-43ab-858c-dc87aa1d0dba.png)
バリアントのドロップダウンから呼び出したいバリアントを選びます。

ただ、これはあくまでも「このバリアントが有効になったときにセットで呼び出す」ぐらいの機能なので絶対的な拘束力はなく、別のカラーのバリアントを有効にしたら上書きされます。

レベルバリアントはこれらの組み合わせでできています。

# レベルバリアントをBPで動かす

レベルバリアントをBPでプレイ中に操作するには、「Level Variant Set Actor」を事前に配置しておくかスポーンする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/991f18b9-8feb-194c-3577-d0813e6d9892.png)

これにごにょごにょアクセスして書き換えたりできるんですが正直テンプレートが複雑すぎて~~何を言っているのかわからない。~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/4ddbb1ad-7278-79e9-a810-ef6d0d8b31a3.png)

**めちゃめちゃ簡単にレベルバリアントを動的に切り替える方法があります！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/a0ab4973-9392-f30d-4d86-58f3e63bcb15.png)

Level Variant Set Actorに「Switch on Variant by Name」か「Switch on Variant by Index」を呼び出すだけで簡単に変更することができます。

![ChangeVariant.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/d06bdab7-c626-a72e-0d61-a70771a3bc46.png)
VariantSetNameには固まり（バリアントセット）の名前を、Variant Nameには差分（バリアント）の名前を入力してください。
Indexで指定する場合、上から数えてください。（0始まり）
例えばBodyの色を黒に変更したい場合、このようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/b0863a6b-60ec-198a-f673-8826b58e005a.png)

めっちゃ簡単ですよ！


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/d22f0b74-be0d-63e0-3202-f94db54e47e7.png)
Level Variant Set Actorも状態管理をするところで適当にSpawnしてしまえば問題なし。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/44cda6f3-fa24-2279-688e-6945b37ca39e.png)
このSet Level Variant Setがマップ上にLevel Variant Set Actorを配置した時のLevel Variant Set選択部分に該当します。

# おわりに
レベルバリアントはコンフィギュレーターを使うのがメイン使用みたいな節がありますが、例えば謎解きゲーのマップの状態変化とかにも使うことができます。地味に便利ですよ！
みんなもレベルバリアントで遊ぼう！！！