質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

Q&A

解決済

1回答

228閲覧

unityのQuickSaveAssetの複数ファイルのセーブ,ロードができない

sirokumatoinu

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

0グッド

0クリップ

投稿2025/05/04 11:50

実現したいこと

初めまして、当方初心者なものでunityやスクリプトの仕様などあまり深く理解していないので必要な情報をあらかじめ提示できていないかもしれませんが、そのときは優しく必要な情報、スクリプトなど教えていただけると幸いです。
本題なのですがunityでセーブ機能を作りたく,QuickSaveというAssetを導入し、途中まではうまく扱えていたのですが、複数のデータをセーブ、ロードするとおかしくなってしまいます。

発生している問題・分からないこと

下にあるロード用のスクリプトを10個のオブジェクトに張り付け、SaveDataNumberを1~10に順番に設定し、別々のデータを読み込めるようにしたかったのですが、下のセーブ用のスクリプトではしっかりセーブできている(LocalLowファイルに存在を確認)のにもかかわらず、ロードができません。
しかしなぜかSaveDataNumberが1の場合のみロードでき、SaveDataNumberが1以外に設定されているオブジェクトを1に設定してもSaveData1のデータを正常にロードしてくれ、逆もまた同じく1のオブジェクトを1以外にするとロードしなくなります。
また、jsonファイルの名前をSaveData2(読み込めないファイル)からSaveData1(読み込めるファイル)にすると、SaveData2の内容をSaveDataNumberが1のオブジェクトで読み込むことができます。

エラーメッセージ

error

1特にありませんでした

該当のソースコード

using System; using UnityEngine; using TMPro; using CI.QuickSave; public class NewGameManager : MonoBehaviour { public TMP_InputField SaveDataNameInput; public TMP_InputField PlayerNameInput; public GameObject ManSelectCheckMark; public GameObject WomanSelectCheckMark; public GameObject SaveDataSelectCheckMark; public RectTransform recttransform; public string SaveDataName; public string PlayerName; public bool Man = true; public bool SaveDataExists; public int SaveDataSlot; public int SaveRialTimeYear; public int SaveRialTimeMonth; public int SaveRialTimeDay; public int SaveGameTimeYear; public int SaveGameTimeMonth; public int SaveGameTimeWeek; void Start() { SaveDataNameInput.text = ""; PlayerNameInput.text = ""; Man = true; SaveDataSlot = 1; for (int i = 1; i <= 10; i++) { SaveDataExists = QuickSaveRaw.Exists($"SaveData{i}"); if (SaveDataExists) { } else { SaveDataSlot = i; break; } } recttransform = SaveDataSelectCheckMark.gameObject.GetComponent<RectTransform>(); } void Update() { if (Man) { ManSelectCheckMark.gameObject.SetActive(true); WomanSelectCheckMark.gameObject.SetActive(false); } else { ManSelectCheckMark.gameObject.SetActive(false); WomanSelectCheckMark.gameObject.SetActive(true); } if (SaveDataSlot == 1) { recttransform.anchoredPosition = new Vector2(698, -50); } else if (SaveDataSlot == 2) { recttransform.anchoredPosition = new Vector2(698, -150); } else if (SaveDataSlot == 3) { recttransform.anchoredPosition = new Vector2(698, -250); } else if (SaveDataSlot == 4) { recttransform.anchoredPosition = new Vector2(698, -350); } else if (SaveDataSlot == 5) { recttransform.anchoredPosition = new Vector2(698, -450); } else if (SaveDataSlot == 6) { recttransform.anchoredPosition = new Vector2(1448, -50); } else if (SaveDataSlot == 7) { recttransform.anchoredPosition = new Vector2(1448, -150); } else if (SaveDataSlot == 8) { recttransform.anchoredPosition = new Vector2(1448, -250); } else if (SaveDataSlot == 9) { recttransform.anchoredPosition = new Vector2(1448, -350); } else if (SaveDataSlot == 10) { recttransform.anchoredPosition = new Vector2(1448, -450); } } public void ManButton() { Man = true; } public void WomanButton() { Man = false; } public void SaveData1() {SaveDataSlot =1;} public void SaveData2() {SaveDataSlot = 2;} public void SaveData3() {SaveDataSlot = 3;} public void SaveData4() {SaveDataSlot = 4;} public void SaveData5() {SaveDataSlot = 5;} public void SaveData6() {SaveDataSlot = 6;} public void SaveData7() {SaveDataSlot = 7;} public void SaveData8() {SaveDataSlot = 8;} public void SaveData9() {SaveDataSlot = 9;} public void SaveData10() {SaveDataSlot = 10;} public void Decision() { } public void Determination() { SaveDataName = SaveDataNameInput.text; PlayerName = PlayerNameInput.text; SaveRialTimeYear = DateTime.Now.Year; SaveRialTimeMonth = DateTime.Now.Month; SaveRialTimeDay = DateTime.Now.Day; SaveGameTimeYear = 1; SaveGameTimeMonth = 2; SaveGameTimeWeek = 3; var settings = new QuickSaveSettings(); settings.Password = "sirokumatoinu"; settings.SecurityMode = SecurityMode.Aes; QuickSaveWriter quickSaveWriter = QuickSaveWriter.Create($"SaveData{SaveDataSlot}", settings); quickSaveWriter.Write<string>("SaveDataName", SaveDataName); quickSaveWriter.Write<string>("PlayerName", PlayerName); quickSaveWriter.Write<int>("SaveRialTimeYear", SaveRialTimeYear); quickSaveWriter.Write<int>("SaveRialTimeMonth", SaveRialTimeMonth); quickSaveWriter.Write<int>("SaveRialTimeDay", SaveRialTimeDay); quickSaveWriter.Write<int>("SaveGameTimeYear", SaveGameTimeYear); quickSaveWriter.Write<int>("SaveGameTimeMonth", SaveGameTimeMonth); quickSaveWriter.Write<int>("SaveGameTimeWeek", SaveGameTimeWeek); quickSaveWriter.Commit(); SaveDataNameInput.text = ""; PlayerNameInput.text = ""; Man = true; SaveDataSlot = 1; for (int i = 1; i <= 10; i++) { SaveDataExists = QuickSaveRaw.Exists($"SaveData{i}"); if (SaveDataExists) { } else { SaveDataSlot = i; break; } } } }
using TMPro; using UnityEngine; using CI.QuickSave; public class SaveDataLoadManager : MonoBehaviour { public TextMeshProUGUI SaveDataNameText; public TextMeshProUGUI SaveRialTimeText; public TextMeshProUGUI SaveGameTimeText; public int SaveDataNumber; public bool SaveDataExists; public string SaveDataName; public int SaveRialTimeYear; public int SaveRialTimeMonth; public int SaveRialTimeDay; public int SaveGameTimeYear; public int SaveGameTimeMonth; public int SaveGameTimeWeek; void Update() { Debug.Log(QuickSaveRaw.Exists($"SaveData{SaveDataNumber}")); SaveDataExists = QuickSaveRaw.Exists($"SaveData{SaveDataNumber}"); if (SaveDataExists) { var settings = new QuickSaveSettings(); settings.Password = "sirokumatoinu"; settings.SecurityMode = SecurityMode.Aes; QuickSaveReader quickSaveReader = QuickSaveReader.Create($"SaveData{SaveDataNumber}", settings); SaveDataName = quickSaveReader.Read<string>("SaveDataName"); SaveRialTimeYear = quickSaveReader.Read<int>("SaveRialTimeYear"); SaveRialTimeMonth = quickSaveReader.Read<int>("SaveRialTimeMonth"); SaveRialTimeDay = quickSaveReader.Read<int>("SaveRialTimeDay"); SaveGameTimeYear = quickSaveReader.Read<int>("SaveGameTimeYear"); SaveGameTimeMonth = quickSaveReader.Read<int>("SaveGameTimeMonth"); SaveGameTimeWeek = quickSaveReader.Read<int>("SaveGameTimeWeek"); SaveDataNameText.text = SaveDataName; SaveRialTimeText.text = SaveRialTimeYear + "/" + SaveRialTimeMonth + "/" + SaveRialTimeDay; SaveGameTimeText.text = SaveGameTimeYear + "年" + SaveGameTimeMonth + "カ月" + SaveGameTimeWeek + "週目"; } } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

・AI(ClaudeAI(Claude,Copilot)に聞き、ソースコード改良
・自分なりに動画や記事、サイトを調べる
・上にあるようにSaveDataの名前を1から2,2から1のように変更し,情報を得る
・unityの再起動
以上のすべてを試して尚まったく改善の兆しが見えません。

補足

unity6の6000.0.46f1
visual studio 2022
を使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました、
私はセーブをする時はquicksavewriterを、検出する時はquicksaveraw,読み込む時はquicksavereaderを使っていたのですが、検出のコードをQuickSaveRaw.ExistsからQuickSaveReader.RootExistsに変更することにより正常に機能するようになりました!
回答してくださった方々もありがとうございました!

投稿2025/05/06 09:13

編集2025/05/09 08:39
sirokumatoinu

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問