この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: マップに配置したTargetPointを取得する方法
SEOタイトル: UE5でTargetPointをC++/Blueprintから取得する方法(GetAllActorsOfClass / タグ絞り込み実装)

この記事の要点
  • TargetPoint は位置情報のマーカーとなる軽量アクター。AI 移動目標 / スポーン位置 / カメラ移動目標などに使う
  • C++: UGameplayStatics::GetAllActorsOfClass(World, ATargetPoint::StaticClass(), OutActors) で全 TargetPoint を取得
  • Blueprint: Get All Actors Of Class ノードに TargetPoint を指定
  • 特定の TargetPoint だけ欲しい場合は Actor Tag でフィルタする(ActorHasTag("SpawnPoint")
  • GetAllActorsOfClass はレベル内の全アクターを走査するため毎フレーム呼ばない。BeginPlay でキャッシュ

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 で取得する

  1. Blueprint グラフを開く
  2. Get All Actors Of Class ノードを追加
  3. Actor Class に TargetPoint を指定
  4. 出力 Out Actors を ForEachLoop に接続
  5. 各要素を Get Actor LocationActor Has Tag で処理

タグだけで絞りたい場合は Get All Actors With Tag ノードを使うと走査が一度で済みます。

パフォーマンスのコツ

状況推奨
BeginPlay で一度だけGetAllActorsOfClass でキャッシュし、メンバ変数に保持
毎フレーム / Tickキャッシュした配列を参照、再走査しない
大量にある派生クラスを作って UPROPERTY(EditAnywhere) で個別参照
動的生成SpawnActor 時に登録、配列管理

派生クラスで設計する(推奨)

用途別に ATargetPoint を継承したクラスを作ると、エディタ上で識別しやすく、誤って取得することも減ります。

// SpawnTargetPoint.h
#pragma once
#include &quot;Engine/TargetPoint.h&quot;
#include &quot;SpawnTargetPoint.generated.h&quot;

UCLASS()
class MYGAME_API ASpawnTargetPoint : public ATargetPoint
{
    GENERATED_BODY()
public:
    UPROPERTY(EditAnywhere, Category=&quot;Spawn&quot;)
    int32 Priority = 0;
};

まとめ

  • レベル内の TargetPoint は GetAllActorsOfClass でまとめて取得
  • 個別識別は Actor Tag または派生クラスで行う
  • 取得はBeginPlay で一度だけ、結果はキャッシュ
  • Blueprint でも同等のノードが用意されている