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

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

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

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Unity

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

Q&A

1回答

719閲覧

ゲームのセーブデータをメニュー画面で操作をしてJsonファイルで保存したい

ryyyy

総合スコア2

C#

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Unity

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

0グッド

0クリップ

投稿2022/12/18 03:54

編集2022/12/18 05:29

前提

・2DRPGを制作中
・PlayerPrefsは使わない予定
・サーバと連携したデータ操作を将来的には行いたい考え

実現したいこと

イメージ説明
【説明】
**ローカルサーバ以降の流れは無視してください**

おおまかな流れ
1.メニューからセーブ
2.対象GameObjの現在位置を取得
3.Jsonファイルでセーブデータを作る

・PlayerTransformではButtonClickでセーブロードを受け付けたい
(MenuUIからボタンでセーブするイメージ)
【知りたいこと】
・セーブロードをJsonを使ってできていることは理解できるが上記のような「ボタンでセーブ」するというプレイヤー感覚に近い実装方法はないのか。
・ButtonClickに拘っているわけではないので別のよい方法があれば教えてほしい。

試したこと

Quick Saveを使用したブログ
自分が実現したいことに一番近いブログだったため参考程度にリンク張っておきます。

その他、Qiita,Youtubeなども参考にしたが理解に手ごたえがなかった。
Quick Saveは手段の一つとしても現在考えています。

補足情報(FW/ツールのバージョンなど)

Unity2019.4.40f1
追記:
実現したいことをメニュー操作一点に絞りました。
イメージ説明の図式を分かりやすく改良しました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/12/18 04:15

何が聞きたいことでしょうか?
isimasa

2022/12/18 04:38

ニフクラさんでは駄目なのでしょうか。 Youtubeで”unity オンラインランキング”と調べたら丁寧に解説しているものが出てきました。
isimasa

2022/12/18 06:16

セーブデータのメニュー画面を作りたいということであれば、「ボタンでセーブ」するためにjson化した関数にpublicをつけButtonコンポーネントのOnClickで呼び出せばよいと思います。 json化したいデータはどれ程あるのでしょうか。プレイヤーのセーブしたいデータにはどんなパラメータがありますか?
退会済みユーザー

退会済みユーザー

2022/12/18 06:54

依然として何を聞きたいのか分かりません。フレームワークに備わっている機能のようなもので IDE でドラッグ&ドロップするだけで質問者さんのやりたいことが実現できるようなものを探しているのか(そういうのがあるのかは分かりませんが)、地道に自力でコードを書いて C# のオブジェクトを JSON 文字列にシリアライズしてファイルに保存するやり方を聞いているのか・・・
ryyyy

2022/12/18 07:44

地道に自力でコードを書いて C# のオブジェクトを JSON 文字列にシリアライズしてファイルに保存するやり方になります。 正確に言うとblanketさんの方法です。 また、この方法に拘っているわけではないのでゲームセーブの良い方法があれば教えてほしいです。
ryyyy

2022/12/18 08:08

>blanketさんへ その発想まで至れませんでした。試してみます。 プレイヤーのパラメータはテストも兼ねてplayernameだけです。
退会済みユーザー

退会済みユーザー

2022/12/18 08:34

> 地道に自力でコードを書いて C# のオブジェクトを JSON 文字列にシリアライズしてファイルに保存するやり方になります。 C# のプログラムで文字列をテキストファイルに保存する方法、テキストファイルの文字列を C# のプログラムで読んでくる方法という基本的な知識はありますよね。 であれば、Unity 利用できるライブラリを使って、C# のオブジェクトを JSON 文字列にシリアライズする方法、JSON 文字列を C# のオブジェクトにデシリアライズする方法が分かれば分かればいいのですか?
guest

回答1

0

C#

1namespace WBMap 2{ 3 [System.Serializable] 4 public class UserData 5 { 6 public string userName="DefaultName"; 7 public int userRank; 8 } 9}

C#

1using UnityEngine; 2using System.IO; 3 4namespace WBMap 5{ 6 public class SaveSystem 7 { 8 #region Singleton 9 private static SaveSystem instance = new SaveSystem(); 10 public static SaveSystem Instance => instance; 11 #endregion 12 private SaveSystem() { Load(); } 13 14 public string Path => Application.dataPath + "/data.json"; 15 public UserData UserData { get;private set; } 16 17 public void Save() 18 { 19 string jsonData = JsonUtility.ToJson(UserData); 20 StreamWriter writer = new StreamWriter(Path, false); 21 writer.WriteLine(jsonData); 22 writer.Flush(); 23 writer.Close(); 24 } 25 26 public void Load() 27 { 28 if(!File.Exists(Path)) 29 { 30 Debug.Log("初回起動"); 31 UserData = new UserData(); 32 Save(); 33 return; 34 } 35 36 StreamReader render = new StreamReader(Path); 37 string jsonData = render.ReadToEnd(); 38 UserData = JsonUtility.FromJson<UserData>(jsonData); 39 render.Close(); 40 } 41 } 42}

C#

1using UnityEngine; 2 3namespace WBMap 4{ 5 public class SaveTest : MonoBehaviour 6 { 7 public void SaveTesting() 8 { 9 SaveSystem.Instance.UserData.userName = "TestPlayer"; 10 SaveSystem.Instance.UserData.userRank = 2; 11 SaveSystem.Instance.Save(); 12 Debug.Log("セーブしました"); 13 } 14 public void Loadtesting() 15 { 16 SaveSystem.Instance.Load(); 17 Debug.Log("ロードしました"); 18 } 19 private void Update() 20 { 21 if(Input.GetKeyDown(KeyCode.C)) 22 { 23 Debug.Log("ランクの表示"); 24 Debug.Log("User R=" + SaveSystem.Instance.UserData.userRank); 25 } 26 } 27 28 } 29}

SaveSystem セーブ、ロード関数本体
UserData プレイヤーのパラメータを集めたもの
SaveTest ボタンで呼び出す

自分の方でテスト用に作ってみました。参考にしたのは、Youtubeの白黒_unityさんです。

投稿2022/12/18 08:59

isimasa

総合スコア295

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問