この記事の要点
- 基本は
Get Current Level Nameノード → 文字列比較で判定 UGameplayStatics::GetLevelNameの Blueprint ラッパー。Streaming レベルでない永続レベル名を返す- PIE (Play In Editor) とパッケージング後で文字列が異なる場合がある →
Remove PrefixオプションでUEDPIE_0_を除去 - Soft Object Reference 比較で型安全にする方法もある
- 複数レベル判定は
Switch on Stringや Blueprint Function Library 化で整理
1現在のレベル名を取得する
Blueprint で「今どのレベルが開いているか」を判定する基本は Get Current Level Name ノードです。これは C++ の UGameplayStatics::GetCurrentLevelName のラッパで、永続レベル (Persistent Level) の名前を返します。
2最もシンプルな実装
[Event BeginPlay]
──→ [Get Current Level Name]
Remove Prefix String = true (推奨)
──→ String の出力
──→ [Equal (String)] と比較
A = (level name)
B = "MainLevel"
Return → Branch
True → Print "MainLevel です"
False → Print "別のレベル"
Get Current Level Name のオプション
- Remove Prefix String (デフォルト true): PIE 時の
UEDPIE_0_プレフィックスを自動で除去。これを有効にしないと PIE と本番で名前が変わる - 戻り値の型は
String。Name型ではない
3PIE vs パッケージング後の違い
UE では Play In Editor 中、レベル名に自動でプレフィックスが付きます:
| 実行モード | 取得される名前 |
|---|---|
| PIE (Server) | UEDPIE_0_MainLevel |
| PIE (Client) | UEDPIE_1_MainLevel |
| Standalone | MainLevel |
| Packaged | MainLevel |
Remove Prefix String = true でこの違いを吸収できます。
4Soft Object Reference で型安全に
文字列比較はタイプミスに弱い。Soft Object Reference を使うと、エディタでレベルを選択でき、リネームにも追従できます:
[Variable]
Name = TargetLevel
Type = Soft Object Reference → World
[Branch]
Condition:
Get → Get Current Level Soft Object Path (UE 5.x)
Equal? TargetLevel
# もしくは Soft Reference を文字列に変換して比較
[Get Path Name (Soft Object Reference)]
→ "/Game/Maps/MainLevel.MainLevel"
[Get Asset Name]
→ "MainLevel"
5複数のレベル判定 (Switch on String)
[Get Current Level Name (Remove Prefix=true)]
──→ [Switch on String]
Selection = (level name)
Pins:
"MainLevel" → 処理 A
"BattleLevel" → 処理 B
"TitleLevel" → 処理 C
Default → エラー処理
6Blueprint Function Library にまとめる
「現在のレベルが X か?」を頻繁に判定するなら、Blueprint Function Library に純粋関数として切り出すと再利用しやすくなります。
- Content Browser → 右クリック → Blueprints → Blueprint Function Library
- 名前を
BFL_LevelHelper等に - 関数
IsCurrentLevel(LevelName: Name) → boolを作成 - 内部で Get Current Level Name → 比較 → 真偽を返す
- BeginPlay 等から
IsCurrentLevel("MainLevel")で呼び出せる
[Function: IsCurrentLevel]
Input: LevelName (Name)
[Get Current Level Name (Remove Prefix=true)]
──→ [Name → String]
──→ [Equal (String, Case Insensitive)]
A = currentName
B = LevelName (String 変換)
──→ Return (bool)
7ストリーミングレベルの場合
Level Streaming (永続レベルにサブレベルをロード) を使っている場合、Get Current Level Name は永続レベル名を返します。ロード済みのサブレベルを判定したい場合は別の方法が必要です:
[Get Streaming Level (by Object Reference)]
Level = (Streaming Level Reference)
[Is Level Loaded] / [Is Level Visible]
→ bool
# サブレベルをすべて列挙
[Get World] → [Get Streaming Levels]
→ Array of Level Streaming
ループで .GetLevelName() を比較
8Level Transition でロード完了を検知
レベル切替直後に処理したいなら、OnLevelLoaded イベントが便利です:
[Get All Actors of Class] (GameInstance or GameMode で)
--- Open Level (by Name) して切替 ---
# GameInstance の Event Graph で
[Event Init]
Bind to → OnLevelLoaded
[Event OnLevelLoaded]
──→ [Get Current Level Name]
──→ 判定処理
9C++ から呼ぶ場合の対応
#include "Kernel/GameplayStatics.h"
void AMyActor::BeginPlay()
{
Super::BeginPlay();
FString CurrentLevel = UGameplayStatics::GetCurrentLevelName(this, true);
// 第二引数 RemovePIEPrefix = true
if (CurrentLevel == TEXT("MainLevel"))
{
UE_LOG(LogTemp, Log, TEXT("MainLevel detected"));
}
}
// または Level Soft Reference で
TSoftObjectPtr<UWorld> TargetLevel;
FString CurrentPath = GetWorld()->GetMapName();
CurrentPath.RemoveFromStart(TEXT("UEDPIE_0_"));
10FAQ
Q: PIE では一致するのに、パッケージング後だけ一致しない
A: Remove Prefix String が false になっている可能性。または比較対象の文字列が PIE 用にプレフィックス付きでハードコードされていないか確認。大文字小文字や末尾スペースも疑う。
Q: World Composition / World Partition を使っているとき
A: World Partition では永続レベルの概念が変わるため、レベル全体名の概念が薄れます。代わりに UWorldPartitionSubsystem や Data Layer 単位の判定を使用。
Q: GetCurrentLevelName と GetMapName の違い
A: GetCurrentLevelName はレベル名 (ファイル名相当)、GetMapName は World 全体のパス的な名前。PIE プレフィックス除去の有無や、サブレベル時の挙動が異なります。多くの場面では GetCurrentLevelName で十分。
子ページはありません
- レベルを移動する方法
- レベルの「基本」テンプレートと「オープンワールド」テンプレートの違い
- Blueprintで現在開いているレベルが特定のレベルであるか調べる方法
- レベルごとにゲームモードを変更する方法
- 動的にインスタンスが属するレベルを変更する方法
- エディタ上でインスタンスが属するサブレベルを変更する方法
- とあるアクタから現在開いているレベルの変数にアクセスする方法
- プロジェクトを開いたときの最初のレベルを変更する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15