
Unreal Engine 5 の Blueprint を組んでいると、再生した瞬間にエラーが大量に出て、
ブループリントランタイム エラー:
「プロパティ CallFunc_Array_Get_Item の読み取りを試行するためのアクセスはありません」
ノード: SpawnActor … / グラフ: EventGraph …
のようなログに埋もれることがあります。
このエラーは一言で言うと、
配列(Array)の GET で “存在しない要素” を取ろうとした(範囲外アクセス)
です。
この記事では、初心者でも迷わないように「何が起きているか」「どこが原因か」「どう直すか」「再発防止」を工程別に整理します。
Contents
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 の例)
Out Row Names→Length(Array Length)Length > 0Branch- True:通常処理へ
- False:
Print String("RowNamesが0件")→ 終了
これで、空配列が原因のGETエラーは消えます。
対策2:Random の Max は必ず Length - 1
正しい接続
Length→Int - Int(Subtract)(右側を 1)- その結果 →
Random Integer in Rangeの Max
Minは0です。
対策3:GETしたActorは IsValid で保険をかける(Actor参照の場合)
SpawnPoints のような Actor参照配列なら、さらに一段安全にできます。
SpawnPoints→GET(Index)Is Valid?(対象:GETで出たActor)- Branch
- True:
GetActorTransform - False:
Print String("SpawnPointがNone")
- True:
これで、None参照によるエラーも封じられます。
4. 「どこで起きているか」を最短で特定する方法
エラーログの右側に
- ノード名
- グラフ名(EventGraphなど)
- Blueprint名
が出ます。
ただ、初心者はここから辿るより、次の方法が速いです。
● GET の直後に Print して Index と Length を出す
例えば、
Print StringでIndexとLengthを表示する
これだけで、
- そもそも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が原因か」をピンポイントで指摘しつつ、記事内に 実例として追記できる形にも整えられます。









