エラー大全集

様々なツールのエラーを解説しています。

【UE5】「Set Brush from Material」で出るアクセスエラーの原因と対処法|image_0の読み取りができない理由を徹底解説


Unreal Engine 5(UE5)でUI(UMG)を作っているとき、

Set Brush from Material」ノードを使ってImageウィジェットの見た目を動的に変えようとしたら、
次のようなエラーが出てしまうことがあります。

ブループリントランタイム エラー:
「(real) プロパティ (circle_widget_Cのimage_0)の読み取りを試行するためのアクセスはありません」

このメッセージ、英語で言うと「Accessed None trying to read property image_0」──
つまり「そのImage_0というウィジェットが存在していない(参照がNone=ヌル)状態でアクセスしようとした」という意味です。

いくらノードを組み替えても直らない、と悩んでいる人が多いこのエラー。
実は原因はたった数パターンに絞られています。

この記事では、
なぜSet Brush from Materialでアクセス違反が起こるのか、
そしてどこを直せば二度と出なくなるのかを、Blueprint初心者でも理解できるように解説します。

このエラーが意味すること

UE5のブループリント実行エラーには「Accessed None」という種類があり、
これは「対象の参照が空(無効)なのにプロパティを読み書きしようとした」ときに出るものです。

今回のケースで言えば、
Set Brush from Material の入力ピンに繋がっている Image_0(UMGの画像コンポーネント) が、
実行時にUEが「存在しない」と判断しています。

つまりエンジン的には、

“Image_0”という変数がNone(ヌルポインタ)だからSet Brushできないよ
ということです。

発生する主なタイミング

このエラーは、次のような状況で起こることが多いです。

  1. ウィジェットがまだ生成されていないのにアクセスしている
     → たとえばBeginPlayでSet Brushを呼んでいる場合。

  2. Imageウィジェットが変数としてバインドされていない
     → UMGエディタ上で「Is Variable」にチェックが入っていない。

  3. 別ウィジェット内のImageを参照しているが、参照経路が間違っている
     → たとえば「Circle_Widget_C」を生成していない状態で、その中のImage_0を操作している。

  4. マテリアルがUI用(User Interface Domain)になっていない
     → 一見関係なさそうに見えて、マテリアルの設定が間違っていると内部で例外が発生することも。

まず確認すべきポイント

① Imageが「Is Variable」になっているか?

  • UMGデザイナーでImage_0を選択。

  • 「詳細」タブの一番上にある「Is Variable」にチェックが入っていることを確認。
    → これが外れていると、Blueprintからアクセスできずエラーになります。

② 処理を呼び出すタイミングは「Event Construct」以降か?

  • 多くの人はEvent BeginPlayでSet Brush from Materialを実行してしまいがちですが、
    その時点ではウィジェットがまだViewportに追加されていません。

  • UMG内部でUIを操作するときは、Event ConstructまたはOnInitializedイベントを使いましょう。

エラーを解消するための実践手順

ここからは、実際にどのように修正すれば「Set Brush from Material」のアクセスエラーが消えるのか、Blueprintでの手順を順に解説します。
どの手順も安全で、プロジェクトを壊す心配はありません。

(1) Imageウィジェットの「Is Variable」を有効にする

まず、最も多い原因がこれです。
UI(UMG)エディターで対象のImageが変数として扱われていないと、Blueprintから参照できません。

手順:

  1. UMGブループリントを開く。

  2. 問題のImage_0をクリック。

  3. 「詳細」パネルを下までスクロール。

  4. 「Is Variable」にチェックを入れる。

これを保存してコンパイルし直すと、BlueprintでImage_0が参照可能になります。

(2) Set Brush from Materialを「Construct」以降で呼ぶ

UE5では、ウィジェットの生成順がとてもシビアです。
BeginPlayイベントで「Set Brush from Material」を呼ぶと、まだUMGが生成されておらずアクセス不能(None)になることがあります。

正しい呼び出しタイミング:

Event Construct

 └ Delay(0.1秒)※必要に応じて

   └ Set Brush from Material(Target: Image_0)

 

これで確実にImage_0がメモリ上に存在してから処理が走るようになります。

(3) マテリアル設定を「User Interface」に変更

UI上でマテリアルを使う場合は、必ずマテリアルのドメインをUI用に切り替える必要があります。
そうしないと、マテリアルの内部式がImageに対応せず、結果的にアクセスエラーが発生します。

手順:

  1. 使用しているマテリアル(例:M_CircleEffect)を開く。

  2. 詳細パネルで「Material Domain」をUser Interfaceに変更。

  3. 保存して閉じる。

その後、再度「Set Brush from Material」でこのマテリアルを指定します。

(4) 別ウィジェットのImageを操作する場合の注意

もしあなたが「別ウィジェット(例:Circle_Widget)」内のImageを操作しているなら、
そのウィジェットが実際に生成済みであることを確認する必要があります。

以下のような構成にしていませんか?

MainWidget → (CreateWidget) → Circle_Widget

MainWidget から Circle_Widget の Image を直接操作

 

このとき、Circle_Widgetの生成が終わる前にSet Brushを呼ぶと、内部のImage_0がNoneになり同じエラーが出ます。

対処法:

MainWidget

└ Create Widget (Circle_Widget)

  └ Add to Viewport

    └ Delay(0.1)

      └ Call Function: Set Brush from Material (Inside Circle_Widget)

 

つまり、「親から直接いじらず、子ウィジェット自身の内部イベントでSet Brushを行う」ほうが安全です。

(5) それでも直らない場合はデバッグログで確認

Blueprint内で「Print String」ノードを使って、Image_0がNoneかどうかを確認しましょう。

Print String(Image_0 → IsValid? → 出力)

 

実行結果が「False」なら、その時点でウィジェット参照が存在していません。
順番を遅らせるか、イベント発火の位置を見直せば解決します。

✅ まとめ

原因

症状

対処法

Imageが変数化されていない

Image_0が参照できない

UMGで「Is Variable」をON

実行タイミングが早すぎる

Construct前にアクセス

Event Construct以降で実行

Materialの設定が通常ドメイン

Brush適用で例外

Material Domainを「User Interface」に変更

子ウィジェット未生成

外部からアクセス不可

生成完了後に内部で処理

結論:
このエラーは「Imageウィジェット参照が無効(None)」であることを意味しており、
Blueprintの変数設定または実行タイミングを修正すれば確実に直ります。

一番確実な流れは次の通りです。

Event Construct → Delay(0.1s) → Set Brush from Material(UI用マテリアル)

この構成にすれば、「(real) プロパティの読み取りを試行するためのアクセスはありません」というエラーは再発しません。