【Unreal Engine】Data Asset入門:同じBlueprintで、敵の見た目とHPを差し替える

作成: 2025-12-12最終更新: 2026-09-07

敵の名前・HP・メッシュをData Assetへまとめ、同じActorに別のデータを渡す手順を図解。Blueprintだけで型と実データを作り、標準の球と箱で見た目を確認。データを複製して敵の種類を増やす実験も紹介します。

敵の種類を増やすとき、変えたいのが名前・HP・見た目だけなら、動かす処理までコピーする必要はありません。共通のBlueprintに「今回はこの敵の設定を使って」と渡せると、追加も調整もしやすくなります。

その設定をまとめる入れ物が Data Asset です。たとえばスライム用、ゴブリン用のデータを作っておき、同じBlueprintから配置した2体のActorへ、それぞれ割り当てます。同じ処理でも、受け取ったデータに合わせて見た目とHPが変わります。

他のエンジンでいうと: Unity の ScriptableObject 、Godot の Resource(.tres) に当たります。1体ずつ設定を作り、同じ処理へ差し替える使い方まで同じです。

この記事では、Blueprintだけでデータの型と実データを作ります。見た目にはUE標準の球と箱を使い、データを1枚増やすと、敵の種類が増える ところまで試しましょう。

同じBlueprintが、スライム用とゴブリン用のData Assetを読んで見た目とHPを変える

この記事でわかること

  • 名前・最大HP・メッシュを持つData Assetを作る
  • 配置したActorごとに、読むデータを指定する
  • メッシュと現在HPへ値を反映し、出力で確かめる
  • Data Assetを複製して、新しい敵の設定を追加する

Actorにコンポーネントと変数を追加したことがある人を想定しています。数値を表で管理する方法を先に知りたい場合は、Data Tableの記事も参考にしてください。

Sponsored

仕組み:データを作るものと、使うものを分ける

Data Assetは、ゲームで使う設定をプロジェクト内のファイルとして保存したものです。今回は「名前・最大HP・どのメッシュを使うか」をひとまとめにします。メッシュ は、球や箱などの立体の形を持つデータです。

最初は、次の3つを区別すると作業を追いやすくなります。

作るもの今回の名前役割
データの型BPDA_EnemyDefinitionどの項目を持つかを決める
実際のデータDA_Slime、DA_Goblin名前・HP・メッシュの値を入れる
データを使うActorBP_DataAssetEnemyDemo値を読んで、ゲーム内の見た目とHPを設定する
データの型から2枚の実データを作り、Actorがその値を使う関係

DA_Goblin はゴブリンの設定であり、レベルに立つゴブリンそのものではありません。レベルへ配置するのは BP_DataAssetEnemyDemo です。そのActorに DA_Goblin を指定して、使う設定を教えます。Data Assetの公式説明

このように、共通の処理に、差し替えられるデータを渡す 作り方を「データ駆動」と呼びます。敵の種類が増えても、見た目やHPを設定する処理は共通のまま使えます。

Data Tableとは、編集しやすい形で選ぶ

Data Tableも、数値などを処理から分けるための道具です。どちらを使うかは、データの編集方法から考えられます。

やりたい作業選びやすいもの
敵1種類の画面を開き、メッシュを選びながらHPも設定するData Asset
敵100種類のHPを縦に並べて比較し、CSVでまとめて調整するData Table

Data Tableにもメッシュなどへの参照を持たせられます。「数値以外を持てるか」だけで分けず、1件の設定を開くほうが見やすいか、表で比べるほうが見やすいか を基準にすると選びやすくなります。

準備:2種類のData Assetを作る

1. Blueprintでデータの型を作る

  1. コンテンツブラウザの右クリックから「Blueprint Class」を選ぶ。
  2. 親クラスの選択画面で「All Classes」を開く。
  3. PrimaryDataAsset を検索し、「Primary Data Asset」を選ぶ。
  4. BPDA_EnemyDefinition という名前にする。

Blueprintだけで型を作るので、親には Primary Data Asset を使います。Asset Managerという読み込み管理の仕組みにも対応したData Assetですが、今回の実践ではその設定は必要ありません。Primary Data Assetの公式API

BPDA_EnemyDefinition を開き、次の3変数を追加してください。

変数名初期値意味
EnemyNameText空欄表示する敵の名前
MaxHealthInteger100最大HP
EnemyMeshStatic MeshのObject ReferenceNone表示する立体の形

Object Reference(オブジェクト参照) は、使いたいアセットなどを指定しておくための型です。EnemyMesh に球のメッシュを選ぶと、球の形のデータを使えるようになります。Static Mesh ComponentやClass Referenceではなく、Static MeshのObject Referenceを選びます。

3変数とも「Instance Editable」を有効にし、「Private」は無効にしておきます。これで、次に作るData Assetの編集画面から値を入力し、別のBlueprintから値を読めます。コンパイルして保存してください。

2. データを2枚作り、値を入れる

コンテンツブラウザの右クリックから「Miscellaneous」→「Data Asset」を選びます。クラスの一覧で BPDA_EnemyDefinition を選択し、DA_Slime を作ってください。同じ手順で DA_Goblin も作ります。

この手順で作るのは、BPDA_EnemyDefinition型の値を持つData Asset です。「Create Child Blueprint Class」で子Blueprintを作る操作とは区別してください。

それぞれをダブルクリックして、次の値を入力し、保存します。

アセット名EnemyNameMaxHealthEnemyMesh
DA_Slimeスライム30Sphere
DA_Goblinゴブリン60Cube
同じ3項目に、スライムは球とHP30、ゴブリンは箱とHP60を設定する

SphereとCubeは、/Engine/BasicShapes/ にある標準のStatic Meshを使います。同名のアセットが複数ある場合は、マウスを重ねてパスを確認してください。選択欄の設定で「Show Engine Content」を有効にすると、エンジン付属のアセットを探せます。標準形状を使う公式チュートリアル

まだゲーム内には何も出ません。ここまでで作れたのは、2種類の敵の設定です。次に、この設定を読むActorを作ります。

Sponsored

実践:同じActorへ見た目とHPを反映する

Playすると、一方は球でHP30、もう一方は箱でHP60になります。名前とHPはPrint Textで画面へ出し、見た目はメッシュの変更で確認します。図の青色は説明用で、実際の色はメッシュのマテリアルに従います。

同じActorに別のデータを指定すると、Play時に球と箱、HP30と60へ分かれる

1. Actorと表示用の部品を用意する

親クラスが「Actor」のBlueprint BP_DataAssetEnemyDemo を作ります。「Components」でStatic Meshコンポーネントを追加し、Visual という名前にしてください。

Visual のメッシュは、最初はCubeにします。実行中に形を差し替えられるよう、Mobilityは「Movable」にしてください。Simulate Physicsは無効にし、物理演算で落下しないようにします。今回は移動や戦闘は作らず、設定を読み込んだ結果を確認します。

次の変数も追加し、コンパイルします。

変数名初期値設定
EnemyDataBPDA_EnemyDefinitionのObject ReferenceNoneInstance Editableを有効
CurrentHealthInteger0通常の変数のまま

EnemyData は、このActorがどのData Assetを使うか を持つ変数です。Class Referenceを選ぶと DA_Goblin のような実データを指定できないので、Object Referenceを選びます。

2. データの指定忘れを確認する

イベントグラフで、開始時に動く Event BeginPlay から Is Valid をつなぎます。白い実行ピンを持ち、「Is Valid」「Is Not Valid」に分かれるほうのノードを選んでください。

変数一覧から EnemyData をグラフへドラッグし、値を読む「Get」を選びます。その出力をIs Validの「Input Object」へつないでください。

「Is Not Valid」から文字を表示する Print Text をつなぎ、「In Text」に EnemyDataが未設定です と入力します。「Is Valid」は次のメッシュ設定へ進めます。

EnemyDataをIs Validで確認し、未設定ならメッセージを表示する

ここで確かめるのは、読むData Assetが指定されているかです。Noneのまま中身を読もうとすると、読み取り先がないというエラーになります。先に分けておくと、割り当て忘れを見つけやすくなります。実行ピンを持つIs Validの使用例

3. Data AssetのメッシュをVisualへ渡す

EnemyData のGetからドラッグし、Get Enemy Mesh を作ります。「Target」にはEnemyDataがつながった状態になります。これは「そのデータのEnemyMesh項目を読む」という接続です。

EnemyDataを指定し、その中のEnemyMesh項目を読む

次に、Componentsの Visual をグラフへドラッグし、そこから Set Static Mesh を作ります。次の図のように接続してください。「前図の」とあるIs ValidとGet Enemy Meshは、ここまでに置いた同じノードです。新しくもう1個ずつ作る必要はありません。

EnemyDataのEnemy MeshをNew Meshへ、VisualをTargetへ接続する
Set Static Meshの入力つなぐもの
白い実行入力Is Validの「Is Valid」出力
TargetVisualコンポーネントのGet
New MeshGet Enemy Meshの出力

Targetは「形を変える部品」、New Meshは「その部品に使う形」 です。どちらも青いピンですが、役割は違います。Data AssetそのものをTargetへつなぐのではありません。Set Static Meshの公式API

4. 最大HPを、自分の現在HPへ入れる

EnemyData のGetから Get Max Health を作り、その整数の出力を Set CurrentHealth へ渡します。白い実行線は、先ほどのSet Static Meshからつなぎます。

Data Assetから最大HPを読み、このActorのCurrentHealthへ代入する

これで、スライムのデータなら現在HP30、ゴブリンなら60で始まります。Data Assetの最大HPを読み取り、このActor自身の変数へ入れている ことがポイントです。

5. 名前と現在HPを表示する

正しく値が入ったか、文字でも確かめます。EnemyData から Get Enemy Name を作り、CurrentHealth のGetも置いてください。

Format Text を追加し、「Format」へ次を入力します。

{Label}: HP {HP}

{Label}{HP} は値を差し込む場所です。増えた「Label」入力へGet Enemy Nameを、「HP」入力へCurrentHealthをつなぎます。

敵の表示名と、Actorの現在HPから表示する文章を作る

成功用のPrint Textをもう1個置き、Format Textの「Result」を「In Text」へ渡します。白い実行線は、Set CurrentHealthの後からつないでください。

現在HPを代入した後、Format Textで作った文章をPrint Textへ渡す

Format Textや変数のGetには、白い実行ピンがありません。表示に必要な値を作るノードなので、色付きの線でつなぎます。一方、Print Textは文字を出す処理なので、白い線でいつ動くかも指定します。Format TextPrint Textの公式API

2個のPrint Textは、どちらも「Print to Screen」「Print to Log」を有効にし、「Duration」を10、「Key」はNoneのままにします。隠れている設定は詳細ピンを展開して表示してください。

6. 2体を配置して確かめる

  1. Blueprintをコンパイルし、保存する。
  2. BP_DataAssetEnemyDemo をレベルへ2体配置する。
  3. 2体が重ならず見えるよう、床の上で横に離して置く。
  4. 1体目を選び、詳細パネルの EnemyDataDA_Slime を指定する。
  5. 2体目には DA_Goblin を指定し、Playする。

球と箱に分かれ、スライム: HP 30ゴブリン: HP 60 が表示されれば成功です。出力は「Output Log(出力ログ)」にも残ります。表示順ではなく、名前とHPの組で確認してください。

Playを停止して、片方の EnemyData をNoneへ戻す確認もしてみましょう。再びPlayすると EnemyDataが未設定です と出て、そのActorは最初のCubeのままになります。確認後は元のData Assetを指定し直します。

停止中は両方とも初期設定のCubeに見えます。今回はBeginPlayで見た目を変えるため、Data Assetを選び直した結果は、次にPlayしたときに確認します。

追加:データを複製して、キングゴブリンを作る

ゴブリンと同じ仕組みで、HPの多い敵を増やしてみます。

  1. Playを停止し、コンテンツブラウザで DA_Goblin を複製する。
  2. 名前を DA_GoblinKing にする。
  3. 開いて EnemyNameキングゴブリンMaxHealth180 にする。EnemyMeshはCubeのままにする。
  4. 保存し、レベルへ同じ BP_DataAssetEnemyDemo をもう1体置く。
  5. そのActorの EnemyDataDA_GoblinKing を指定し、Playする。
DA_Goblinを複製して名前とHPを変え、同じActorへキングゴブリンの設定を渡す

キングゴブリン: HP 180 と表示され、元のゴブリンがHP60のままなら成功です。増やしたのはデータで、見た目やHPを設定するノードは共通のまま です。

この複製は、別のData Assetを作る操作です。複製後に元の DA_Goblin のHPを変えても、DA_GoblinKing のHPは自動では変わりません。反対に、同じ DA_Goblin を2体へ指定しているなら、そのデータを変更してPlayし直すと、2体とも新しい値で始まります。

Sponsored

おまけ:先に知っておくと良いこと

Data Assetの最大HPと、Actorの現在HPを分ける

同じ DA_Goblin を使うActorは、同じ設定を読みます。それでも、片方がダメージを受けたときに両方のHPを減らしたいわけではありません。

実践で用意した CurrentHealth は、そのための変数です。将来、戦闘を追加するなら、Data Assetの最大HP60をコピーして始め、被弾したら 当たったActorのCurrentHealth を減らします。Data Assetは種類の設定として使い、戦闘中の状態はActor側で管理します。

1枚のData Assetから最大HPを読み、2体が別々の現在HPを持つ

設定が出ない・形が変わらないとき

症状確認するところ
DA_Slimeなどを開いても項目を編集できないBPDA側のInstance Editable、コンパイル、保存
ActorのEnemyData欄でDA_Goblinを選べないEnemyDataの型がBPDA_EnemyDefinitionのObject Referenceか
未設定メッセージが出るレベルに置いたActorのEnemyDataがNoneになっていないか
HPは変わるが形が変わらないDA側のEnemyMesh、Set Static MeshのTarget=VisualとNew Mesh、VisualのMobility
名前は出るがHPが0Set CurrentHealthの値と白い線、表示が代入後になっているか

子Blueprintとの使い分け

共通の処理を保つ方法はData Assetだけではありません。親Blueprintの処理を引き継ぎ、子Blueprintで設定や部品を変える 継承 も使えます。「敵のクラスが増えると、必ず処理も複製される」わけではありません。

見た目や数値を独立した設定として差し替えたいならData Asset、Actorの部品構成や動作も派生させたいなら子Blueprint、という違いから考えられます。

データ自体に「通常ゴブリンの設定を引き継ぎ、一部だけ変える」関係が必要な場合は、Data Only Blueprintという、主に初期値を設定する子Blueprintの作り方もあります。今回のData Assetの複製とは異なる方式です。公式はBlueprintで定義したデータの継承や親クラスの更新を扱う場合、この方式を案内しています。データの継承について

複数のData Assetを表で比べたいとき

Data Assetを複数選んで数値を比べたいときは、Property Matrix が使えます。複数のアセットの項目を表に並べる編集画面です。コンテンツブラウザで対象を複数選び、右クリックの「Asset Actions」からProperty Matrixの編集項目を探します。Property Matrixの公式説明

読み込み時間やメモリが気になったら

今回のObject Referenceでは、Data Assetを読み込むと、指定したメッシュも読み込みの対象になります。大きなメッシュを多数扱うようになったら、ソフト参照と非同期ロードを検討してください。ソフト参照はアセットの場所を記録しておく方式で、必要になったときに読み込む処理と組み合わせて使います。

Primary Data Assetを親にするだけで、読み込みが自動的に非同期へ変わるわけではありません。まずはデータを差し替えて使える形を作り、必要になった段階で読み込み方法も整えると進めやすくなります。

まとめ

  • Data Assetは「作る人が用意する設定」、Actorは「それを読んで動くもの」
  • 配置ごとに読むデータを差し替えれば、Blueprintは1つで足りる
  • 新しい敵は、Data Assetを複製して値を変えるだけで増やせる

作るときの問いかけは、「これは1体ごとに変わる値か、種類ごとに決まる値か」 です。種類ごとならData Assetへ出します。

表の形で大量に持ちたくなったら Data TableとCSV、まとまった構造で扱うなら 構造体 へ進んでください。

Unreal Engine このセクションのノート98