0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[UE5]WorldSubsystemを使ってプレイヤーのいるLevelの名前を取ってみる

Posted at

C++を勉強中にSubSystemを触ってみたから試しにやったことを書いていくよ。

ちなみにWorldSubsystemはゲームが実行されたときやLevelを移動したりするときに生成・廃棄を行ってくれるものって認識。

参考

最初に参考にさせてもらったサイトを乗せとくよ。

猫でも分かるUE4.22から入ったSubsystem
[UE4] WorldSubsystemの生成を制御する方法

1.World SubSystemクラスを追加する

まずはWorld SubSystemクラスを追加していくよ。

コンテンツブラウザの中にあるC++クラスってファイルの中で右クリックするか
image.png

上のバーにある「ツール」の中から新規C++クラスを追加を押すとできるよ
image.png

追加することができたら
全てのクラスを選んでから検索欄で"World SubSystem"って検索するよ
image.png

これで追加完了!!
名前はデフォルトの"MyWorldSubsystem"のままにしといたよ(変えても大丈夫だよ)

2.Level名の取得していく

ファイルを追加したら中身を書いていくよ

MyWorldSubsystem.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Subsystems/WorldSubsystem.h"
#include "MyWorldSubsystem.generated.h"

/**
 * 
 */
UCLASS()
class WORLDSUBSYSTEM_API UMyWorldSubsystem : public UWorldSubsystem
{
	GENERATED_BODY()
	
public:
	UMyWorldSubsystem();

	virtual void Initialize(FSubsystemCollectionBase& Collection);

	UPROPERTY(BlueprintReadOnly, Category = "Level")
	FString LevelName;

};
MyWorldSubsystem.ccp
// Fill out your copyright notice in the Description page of Project Settings.


#include "MyWorldSubsystem.h"

UMyWorldSubsystem::UMyWorldSubsystem()
{
}

void UMyWorldSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
	Super::Initialize(Collection);

	FString _LeftStr;

	GetWorld()->GetFullName().Split(TEXT("."), &_LeftStr, &LevelName);

	UE_LOG(LogTemp, Log, TEXT("LevelName : %s"), *LevelName);
}

画像で見せるとこんな感じ

MyWorldSubsystem.h
image.png

MyWorldSubsystem.ccp
image.png

ゲームが実行されたりしてLevelが呼ばれたら、初期化の段階で現在のLevel名を取ってくる。
GetFullName() で出た文字列をSprit() を使って「.」より後ろを取ることで名前を取るようにしてるよ。割と強引...
LevelNameのUPROPERTY()はBPでも取れるようにするためだよ

UPROPERTY()について気になる人は参考になるかも
いまさら聞きづらいUPROPERTY・UFUNCTION

3.実際にプレイしてみる

実際にプレイしてみてちゃんとLevelの名前が出てるか確認するよ。

まずはプレイした後にLogを見れるようにアウトプットログを出しとくよ。
やり方二つあるからお好きなほうで
image.png

image.png

じゃあプレイ!!

image.png
ちゃんと出てる...!
これでLevel名がとることができたよ。やったね。

4.BPでもLevelNameを取ってみる

BPでもLevelNameを取ってみるよ

レベルブループリントでさっき作った”MyWorldSubSystem”を持ってくるよ。

image.png

そしたら持ってきたサブシステムから"LevelName"を出してこんな感じにつなげてあげると...
image.png

image.png
ちゃんとLevelNameを取ってこれた!
Levelを移動しても名前はちゃんと更新されるよ。

Levelの名前取るだけならSubSystem組まなくてもいいかもしれないけどまぁ練習ということで...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?