タイトル: マップに配置したTargetPointを取得する方法
SEOタイトル: UE5でTargetPointをC++/Blueprintから取得する方法(GetAllActorsOfClass / タグ絞り込み実装)
| この記事の要点 |
|
TargetPoint とは
TargetPoint は Unreal Engine 5 (UE5) に標準で含まれる軽量アクターで、レベル内に「位置と回転」を持つマーカーを置くために使います。実体的な描画やコリジョンを持たず、ゲームロジックから「ここに何かを移動・配置せよ」と参照するための目印として機能します。
| 用途 | 具体例 |
|---|---|
| AI 移動目標 | パトロール経路の中継点、追跡先 |
| スポーン位置 | プレイヤー / 敵 / 拾得アイテムの出現点 |
| カメラ移動目標 | カットシーンのカメラ経路 |
| イベント発生位置 | ステージ進行で重要な座標の記録 |
C++ で取得する
1. ヘッダーをインクルード
#include "Engine/TargetPoint.h"
#include "Kismet/GameplayStatics.h"
2. レベル内の全 TargetPoint を取得
TArray<AActor*> TargetPoints;
UGameplayStatics::GetAllActorsOfClass(
GetWorld(),
ATargetPoint::StaticClass(),
TargetPoints
);
UE_LOG(LogTemp, Log, TEXT("TargetPoint count: %d"), TargetPoints.Num());
3. タグで特定の TargetPoint だけ抽出
ATargetPoint* SelectedTarget = nullptr;
for (AActor* Target : TargetPoints)
{
if (Target->ActorHasTag(FName("SpawnPoint")))
{
SelectedTarget = Cast<ATargetPoint>(Target);
break;
}
}
if (SelectedTarget)
{
FVector Loc = SelectedTarget->GetActorLocation();
UE_LOG(LogTemp, Log, TEXT("Spawn at: %s"), *Loc.ToString());
}
4. タグ別にまとめて取り出す
// GetAllActorsWithTag は AActor 配列、種別チェックは Cast で
TArray<AActor*> SpawnPoints;
UGameplayStatics::GetAllActorsWithTag(
GetWorld(), FName("SpawnPoint"), SpawnPoints);
Blueprint で取得する
- Blueprint グラフを開く
- Get All Actors Of Class ノードを追加
- Actor Class に
TargetPointを指定 - 出力
Out Actorsを ForEachLoop に接続 - 各要素を
Get Actor LocationやActor Has Tagで処理
タグだけで絞りたい場合は Get All Actors With Tag ノードを使うと走査が一度で済みます。
パフォーマンスのコツ
| 状況 | 推奨 |
|---|---|
| BeginPlay で一度だけ | GetAllActorsOfClass でキャッシュし、メンバ変数に保持 |
| 毎フレーム / Tick | キャッシュした配列を参照、再走査しない |
| 大量にある | 派生クラスを作って UPROPERTY(EditAnywhere) で個別参照 |
| 動的生成 | SpawnActor 時に登録、配列管理 |
派生クラスで設計する(推奨)
用途別に ATargetPoint を継承したクラスを作ると、エディタ上で識別しやすく、誤って取得することも減ります。
// SpawnTargetPoint.h
#pragma once
#include "Engine/TargetPoint.h"
#include "SpawnTargetPoint.generated.h"
UCLASS()
class MYGAME_API ASpawnTargetPoint : public ATargetPoint
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, Category="Spawn")
int32 Priority = 0;
};
まとめ
- レベル内の TargetPoint は
GetAllActorsOfClassでまとめて取得 - 個別識別は Actor Tag または派生クラスで行う
- 取得はBeginPlay で一度だけ、結果はキャッシュ
- Blueprint でも同等のノードが用意されている