UE5「CallFunc_Array_Get_Item にアクセスできません」エラーの原因と対策(Blueprint初心者向け)

Unreal Engine 5 の Blueprint を組んでいると、再生した瞬間にエラーが大量に出て、

ブループリントランタイム エラー:
「プロパティ CallFunc_Array_Get_Item の読み取りを試行するためのアクセスはありません」
ノード: SpawnActor … / グラフ: EventGraph …

のようなログに埋もれることがあります。

このエラーは一言で言うと、

配列(Array)の GET で “存在しない要素” を取ろうとした(範囲外アクセス)

です。
この記事では、初心者でも迷わないように「何が起きているか」「どこが原因か」「どう直すか」「再発防止」を工程別に整理します。


1. エラー文の意味を分解する

● CallFunc_Array_Get_Item とは?

Blueprintの GET(配列から要素を取り出すノード) が内部的に作る一時変数名です。

つまりエラーは、

  • Array Get で取り出したはずの要素(Item)が
  • 存在しない / 無効(None)でアクセスできない

と言っています。

●「アクセスはありません」の正体

ほぼ確実に次のどれかです。

  • 配列が空(Length = 0)
  • Index が範囲外(例:要素数10なのにIndex=10を取りにいった)
  • 配列の中身が None(Actor参照配列で、要素が空)

2. 典型的な原因(今回のケースで起きやすい順)

原因A:Random の Max が間違っている(Length をそのまま使っている)

配列のIndexは 0 始まりです。

  • 要素数が 10 の配列
    → 取れるIndexは 0〜9

なのに、Random Integer in Range の Max を Length(=10) にしてしまうと、

  • たまに 10 が出る
  • GET(10) を実行
  • 範囲外でクラッシュ級のエラー

になります。

✅ 正解は
Max = Length - 1 です。


原因B:配列が空のまま GET している(RowNames / SpawnPoints が0件)

たとえば DataTable の RowNames を配列で受け取ったとしても、

  • DataTableが未設定
  • Rowが0件
  • 取得ノードが実行されていない(白線が繋がってない)

などで Out Row Names が空配列になることがあります。

空配列で GET(0) をすると一発でエラーです。

✅ 対策は
Length > 0 の Branch を必ず挟む こと。


原因C:Actor参照配列(SpawnPoints)に None が混ざっている

SpawnPoints の配列が Actor 参照の場合、

  • 1個もセットされていない
  • 途中の要素が消されて None になっている

といった状態で

  • GET で None を取り出す
  • GetActorTransform に渡す
  • None にアクセスしてエラー

という流れになります。

✅ 対策は

  • IsValid(または Is Valid?)でチェックしてから使う
  • 配列の中身をレベル上で必ずセットする
    のどちらかです。

3. 直し方(最短ルート:安全装置を入れる)

ここからは「二度と大量エラーを出さない」ためのテンプレを紹介します。
DataTableのRowNamesでも、SpawnPointsでも同じ考え方で使えます。


対策1:配列が空なら止める(Length > 0 → Branch)

手順(RowNames の例)

  1. Out Row NamesLength(Array Length)
  2. Length > 0
  3. Branch
    • True:通常処理へ
    • False:Print String("RowNamesが0件") → 終了

これで、空配列が原因のGETエラーは消えます。


対策2:Random の Max は必ず Length - 1

正しい接続

  • LengthInt - Int(Subtract)(右側を 1)
  • その結果 → Random Integer in Range の Max

Minは0です。


対策3:GETしたActorは IsValid で保険をかける(Actor参照の場合)

SpawnPoints のような Actor参照配列なら、さらに一段安全にできます。

  1. SpawnPointsGET(Index)
  2. Is Valid?(対象:GETで出たActor)
  3. Branch
    • True:GetActorTransform
    • False:Print String("SpawnPointがNone")

これで、None参照によるエラーも封じられます。


4. 「どこで起きているか」を最短で特定する方法

エラーログの右側に

  • ノード名
  • グラフ名(EventGraphなど)
  • Blueprint名

が出ます。

ただ、初心者はここから辿るより、次の方法が速いです。

● GET の直後に Print して Index と Length を出す

例えば、

  • Print String
    IndexLength を表示する

これだけで、

  • そもそもLengthが0だったのか
  • IndexがLength以上になっているのか

が1回で分かります。


5. 再発防止の考え方(Blueprintの鉄則)

このエラーは、Blueprintで配列を使う限り必ず遭遇します。
なので「運が悪かった」ではなく、構造で防ぐのが正解です。

✅ ルール1:GET の前に必ず守る

  • Length > 0
  • Index は 0〜Length-1

✅ ルール2:Actor参照は必ず Valid チェック

  • Is Valid? を通してから Transform / Location / Cast する

✅ ルール3:白線(実行線)がないノードは動かない

「ノードを置いたのに値が入らない」原因の多くはこれです。
RowNamesが空だった、という事故を呼びます。


まとめ:このエラーの本質

Array GET が “存在しないもの” を取り出した
→ 範囲外 or 空 or None

直すには、

  • 空チェック(Length > 0)
  • Max は Length - 1
  • Actor参照は IsValid

この3点をテンプレとして入れるだけで、ほぼ確実に解消できます。


もしよければ、あなたの現在のBlueprint(SpawnPoints周りのGETを含む部分)のスクショを1枚もらえれば、
「どのGETが原因か」をピンポイントで指摘しつつ、記事内に 実例として追記できる形にも整えられます。

おすすめの記事