ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Unreal Engine 5(以下UE5)で「Save Game To Slot」ノードの戻り値(Return Value)がfalseになるのは、セーブデータの書き込みに失敗しているサインです。最も多い原因は、有効なセーブゲームオブジェクトが渡されていないこと(Create Save Game Objectをしていない、または変数がNullのまま)です。本記事では、まず最短で直すための手順を示し、続いて主な原因・確認方法・落とし穴・FAQを順に解説します。なお、ここで紹介する内容はUE5系の一般的な挙動に基づくため、お使いのエンジンバージョンや対象プラットフォームによって細部が異なる場合があります。最終的な仕様は公式ドキュメントでのご確認をおすすめします。
| この記事の要点 |
|---|
|
最短の解決手順(まずこれを試す)
原因の多くは「セーブ処理の組み立て順」と「Null状態のオブジェクトを渡していること」に集約されます。次の手順どおりに組み直すと、多くのケースで戻り値がtrueに戻ります。
- Create Save Game Objectノードで、自作のSaveGameクラスを指定してセーブゲームオブジェクトを生成する。
- 生成したオブジェクトの各変数(メンバ)に保存したい値を代入する。
- そのオブジェクトをSave Game To SlotのSave Game Objectピンに渡す。
- スロット名(Slot Name)とUser Indexを指定する。User Indexは単一プレイヤー想定なら0でよい。
- 戻り値がtrueになることを確認する。falseの場合は、後述の「Is Validチェック」を追加して切り分ける。
ありがちな失敗は、毎フレームや別処理で使う「セーブゲームオブジェクト変数」を宣言だけして一度もCreate Save Game Objectで生成していないパターンです。この場合、変数はNull(未設定)のままSave Game To Slotに渡されるため、保存は成立せずfalseが返ります。「保存の直前に必ず有効なオブジェクトが存在する」状態を作ることが第一歩です。
戻り値がfalseになる主な原因
Save Game To Slotがfalseを返す代表的な原因を、影響が大きい順に整理します。
| 原因 | 何が起きているか | 主な対処 |
|---|---|---|
| セーブゲームオブジェクトがNull | Create Save Game Objectをしておらず、変数が空のまま渡されている | 保存直前にCreate Save Game Objectで生成。Is Validで確認 |
| 処理順が逆 | 値設定や生成より先にSave Game To Slotを呼んでいる | 生成→値設定→保存の順に並べ直す |
| スロット名の不一致・不正 | 空文字や特殊文字、保存とロードで名前が違う | スロット名を変数で固定し、保存・ロードで共有 |
| 保存変数が定義されていない | SaveGameクラス側に該当変数がなく値が乗らない | SaveGameクラスにメンバ変数を定義(必要に応じSaveGame指定子) |
| 書き込み権限・容量不足 | 保存先ディレクトリに書けない、ストレージが満杯 | 空き容量と保存先の権限を確認 |
| プラットフォーム制約 | モバイル/コンソール特有のストレージ・認証要件 | 各プラットフォームの保存方式に合わせる |
1. セーブゲームオブジェクトがNullのまま渡されている
最頻出の原因です。Save Game To Slotは、有効なセーブゲームオブジェクトを受け取って初めて書き込みを行います。Create Save Game Objectを呼んでいない、あるいは別の場所で生成したつもりの変数が実際には空(Null)になっている場合、保存は成立せずfalseが返ります。Save Game Objectピンに渡しているオブジェクトが「確実に生成済みか」を最初に確認してください。
2. 生成・値設定・保存の順序が崩れている
UE5のセーブは「Create Save Game Objectで器を作る → その器に値を入れる → Save Game To Slotで書き出す」という流れが基本です。値の代入より前に保存を呼んだり、生成より前に保存を呼んだりすると、空または不完全な状態が書き出されたり、失敗したりします。ノードの実行ピン(白い矢印)が意図した順序でつながっているかを見直しましょう。
3. スロット名が不正、または保存とロードで食い違っている
スロット名(Slot Name)が空文字だったり、ファイル名として扱いにくい特殊文字(スラッシュ「/」やコロン「:」など)を含んでいると、環境によっては保存に失敗することがあります。さらに見落としがちなのが、保存時とロード時でスロット名がわずかに違うケースです。保存自体は成功していても、ロードで別名を指定して「保存できていない」と誤認することがあります。スロット名は1か所の変数で定義し、保存・ロードの両方から参照するのが安全です。
4. 保存したい変数がSaveGameクラスに定義されていない
保存対象の値は、自作のSaveGameクラス(USaveGameを継承したクラス)のメンバ変数として用意し、その変数へ代入してから保存する必要があります。クラス側に受け皿となる変数がないと、値はどこにも乗らず、保存しても意味のあるデータになりません。C++でArIsSaveGameを有効にして書き出す構成では、対象プロパティにSaveGame指定子を付ける必要がある点にも注意してください(Blueprintのみで完結する一般的な構成では、クラスに変数を持たせて代入すれば保存対象になります)。
5. 書き込み権限・ストレージ容量の問題
保存先に書き込めない場合もfalseになります。ディスク/ストレージの空き容量が不足している、保存先ディレクトリへの書き込み権限がない、といったケースです。特にコンソールやモバイルでは保存先や権限の扱いがPCと異なるため、容量と権限の両面を確認してください。
6. 対象プラットフォーム固有の制約
モバイルやコンソールでは、ストレージの保存方式や認証・認可の要件がPCと異なります。「エディタ上では成功するが、実機ビルドでのみfalseになる」という事例も報告されています。実機で問題が出る場合は、対象プラットフォームのセーブ要件を個別に確認する必要があります。なお、大きなデータの保存や、プレイヤーが操作中の自動セーブでは、フレーム落ちや一部プラットフォームの認証回避の観点から、同期版のSave Game To SlotではなくAsync Save Game to Slot(非同期版)の使用が推奨されています。
原因を切り分けるためのチェック手順
falseが返るとき、どの段階で失敗しているかを切り分けると解決が早まります。
- Is Validで渡す前に確認:Save Game To Slotに渡す直前で、セーブゲームオブジェクトをIs Validに通します。Not Validなら、Create Save Game Objectが実行されていない(=原因1)と特定できます。
- 戻り値を分岐で受ける:Save Game To Slotの戻り値をBranchに接続し、falseのときにPrint Stringでメッセージを出すと、失敗の発生を可視化できます。
- Output Log / Message Logを確認:エディタのログに警告やエラーが出ていないかを確認します。手がかりが残っていることが多いです。
// 切り分けの考え方(擬似フロー) Create Save Game Object(クラス=自作SaveGame) → 変数に値を代入 → Is Valid?(Not Validなら生成漏れ=原因1) → Save Game To Slot(Slot Name=変数で固定 / User Index=0) → Return Value を Branch で判定(false なら Print String で表示) |
保存できているかを確認する方法
保存処理を直したら、本当に書き込めているかを確認します。次の2つが定番です。
- Does Save Game Exist:指定したスロット名とUser Indexのセーブデータが存在するかを真偽値で返します。保存後にtrueになれば、書き込み自体は成立しています。
- Load Game from Slot:保存に使ったのと同じスロット名・User Indexでロードし、戻り値を自作SaveGameクラスにキャストします。キャストが成功し、保存したはずの値が取り出せれば、保存とロードの往復が機能していると確認できます。
ここで重要なのは、確認に使うスロット名・User Indexを保存時とそろえることです。名前やインデックスがずれていると、保存は成功していてもDoes Save Game Existがfalseを返し、原因を見誤ります。
| よくある落とし穴 |
|---|
|
よくある質問(FAQ)
Q1. Create Save Game Objectは毎回呼ぶ必要がありますか?
新規にセーブデータを作る場面では、Create Save Game Objectで有効なオブジェクトを用意してから保存します。すでに有効なセーブゲームオブジェクトを保持していて、その値を更新して保存し直すだけなら毎回生成する必要はありません。ポイントは「Save Game To Slotに渡すオブジェクトが、その時点でNullでないこと」です。不安なときは渡す前にIs Validを挟むと確実です。
Q2. User Indexには何を指定すればよいですか?
単一プレイヤー向けの一般的な構成では0で問題ありません。重要なのは、保存・ロード・存在確認のすべてで同じUser Indexを使うことです。値がずれると、保存したデータを正しく参照できず「保存できていない」ように見えることがあります。
Q3. エディタでは保存できるのに、実機(モバイル等)だけfalseになります。
プラットフォーム固有のストレージ・権限・認証要件が原因のことがあります。実機で問題が出る場合は、対象プラットフォームのセーブ要件を確認し、必要に応じて非同期版のAsync Save Game to Slotの利用も検討してください。具体的な要件はバージョンやプラットフォームで異なるため、最終的には公式ドキュメントでの確認をおすすめします。
まとめ
Save Game To Slotの戻り値がfalseになるのは「保存に失敗した」というサインで、最も多い原因は有効なセーブゲームオブジェクトを渡せていないことです。まずは「Create Save Game Object → 値設定 → Save Game To Slot」の順に組み直し、渡す直前にIs Validを挟んでNullを切り分けるのが近道です。あわせてスロット名・User Indexを変数で固定して保存・ロードで共有し、必要に応じて容量・権限・プラットフォーム制約を確認すれば、多くのケースで保存が成立するようになります。それでも解決しない場合は、Output LogやMessage Logの内容と合わせて、お使いのバージョンの公式ドキュメントを確認してください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 床の上に乗ったらイベントを発生させる方法
- OverlapAllDynamicとOverlapAllの違い
- タイトル画面を作る方法
- サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
- ボタンに文字を記載する方法
- Event ActorBeginOverlapとOn Component Begin Overlapの違い
- キャラクターに特定のオブジェクトとの当たり判定を付ける
- 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
- 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
- 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
- Blenderファイルをインポートする方法
- 鏡を作成する方法
- レベルブループリントでキャラクターの出現を設定する方法
- サードパーソンテンプレートにおけるキャラクター出現の定義
- アイテムに近づいたらボタンを押してイベントを発火させる方法
- 画面の中央にメッセージを表示する方法
- どこからでも呼び出せるカスタムイベントを作成する方法
- カスタムイベントに引数を追加する方法
- 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
- オブジェクトに近づいている間だけメッセージを表示する方法
- PCの画面を操作するUIを作る方法
- コンテンツブラウザに画像を追加する方法
- SetInputMode_UIOnlyを取り消す方法
- 特定の画像の上にマウスカーソルを置いたら手マークにする方法
- オブジェクトがアウトライナーで選択できない原因と解決策
- PlayerStartを作成する方法
- メニュー画面を作成して開く方法
- 「Esc」キーを押してメニュー画面を開く方法
- イベントの「On Clicked」と「On Pressed」の違い
- 「Set Input Mode」の種類と使い方
- 「Set Game Paused」の使い方と詳細解説
- Motion Matchingとは?
- 「GameMode」と「GameModeBase」の違い
- マップに配置したTargetPointを取得する方法
- TargetPointにタグをつけて取得する方法
- Spawnしたインスタンスがイベントを実行する方法
- 特定の時間ごとに処理を実行する方法
- 数値をランダムで出力する方法
- ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
- MaxWalkSpeedを変更する方法
- しゃがむ動作を導入する方法
- キャラクターのアニメーションを設定する方法
- 導入済みのプラグインを確認する方法
- Motion Matchingの導入と必要なプラグイン
- プレイヤーを非表示にする方法
- カメラを傾ける角度を制限させる方法
- 配列からランダムに重ならない要素を特定の数取得する方法
- カメラの映す画面に文字やエフェクトを付ける方法
- キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
- プライマリーデータアセットを活用する方法
- プレイヤーのHPといった変数を定義する最適な場所
- カメラに映った画面をスクリーンショットとして保存する方法
- ゲーム内のカメラ映像を保存して再表示する方法
- HighResShot を使って高解像度の画像を保存する方法(UE5)
- HighResShotで保存した画像のファイル名を取得する方法
- SceneCapture2DとFrameGrabberの画像保存方法の比較
- SceneCapture2Dを使用して画像を保存・取得する方法
- HighResShotとTake High Res Screenshotの違い
- ゲーム終了ボタンを作成する方法
- 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
- 画面上にメッセージを指定された時間表示させる方法
- シェーダコンパイル時間を短縮する方法
- 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
- データベースを活用する方法
- UE5.5がインストールされた環境にUE5.4を追加で導入する方法
- World PartitionとWorld Compositionの違い
- オープンワールドテンプレートとは?
- ポーンをスポーンさせても視点を切り替えない方法
- キャラクター同士がすり抜けてしまう問題の解決方法
- キャラクターの外見を動的に変更
- World Partitionでインスタンスが「アンロード済み」になる問題
- データ アセットとデータ テーブルの違い
- コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
- エディターのソースコードの自動保存の頻度を高める方法
- SpawnActorでSpawn Transform Rotationが反映されない理由
- ミニマップを表示しポーンの位置を反映する方法
- RInterp ToとVInterp Toの違い
- 毎秒実行するイベントの定義方法
- Niagara のエフェクトにコリジョンを持たせる方法
- 「Overlap」と「Hit」の違い
- OverlapはあるがHitがない原因
- Overlapした位置の座標を取得する方法
- ブループリントでレベル間のパラメータを受け渡す方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?