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

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

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

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

JSON

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

0回答

818閲覧

[Unity]変わらないデータを保存・管理する方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

JSON

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2021/11/26 07:16

Unityでアイテムのデータをこんな感じにScriptableObjectで
Scriptable object
保存しているのですが、アイテムの種類を
このScriptableObject(value)と名前(key)のDictionaryで保存しておきたいです。
ですが、画像データを使っている都合上Jsonファイルでの保存ができません。
(Json.netを使っています)

ゲーム全体で変わらない値なので、データから読み込めるようにしたいです。
よろしくお願いします。

以下、現在使用中のコードです。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Newtonsoft.Json; 5using System.IO; 6using System.Linq; 7 8[System.Serializable] 9public class test2 10{ 11 public string id; 12 public Item val; 13 test2(string _id, Item _val) 14 { 15 _id = id; 16 val = _val; 17 } 18} 19 20public class DataManager : MonoBehaviour 21{ 22 public List<test2> tests; 23 Dictionary<string, Item> Assets = new Dictionary<string, Item>(); 24 25 void Start() 26 { 27 Assets = new Dictionary<string, Item>(); 28 foreach (var item in tests) 29 { 30 Assets.Add(item.id, item.val); 31 } 32 SavetheDataTest(); 33 } 34 void SavetheDataTest() 35 { 36 JsonAlpha.Save<Dictionary<string, Item>>(Assets, "C:/Users/pcuser/Desktop/Desktops/Unity Game Datas/Mechanism/Assets/Saves/test1.json"); 37 } 38} 39/// <summary> 40/// Jsonを使い易くするクラスです 41/// </summary> 42public static class JsonAlpha 43{ 44 public static void Save<T>(T target, string filePath) 45 { 46 string json = JsonConvert.SerializeObject(target, Formatting.Indented); 47 StreamWriter streamWriter = new StreamWriter(filePath); 48 streamWriter.Write(json); 49 streamWriter.Flush(); 50 streamWriter.Close(); 51 } 52 public static T Load<T>(T target, string filePath, T defaultreturn) 53 { 54 if (File.Exists(filePath)) 55 { 56 StreamReader streamReader; 57 streamReader = new StreamReader(filePath); 58 string data = streamReader.ReadToEnd(); 59 streamReader.Close(); 60 return JsonUtility.FromJson<T>(data); 61 } 62 else 63 { 64 return defaultreturn; 65 } 66 } 67} 68 69 70 71[CreateAssetMenu(menuName = "Datas/item")] 72 73[System.Serializable] 74public class AssetData : ScriptableObject 75{ 76 public string id; 77 public string name_key; 78 public int type; 79 public Texture2D image; 80 public GameObject original; 81 /*AssetData(string _name, int _type, Texture2D _image, GameObject _original) 82 { 83 name = _name; 84 type = _type; 85 image = _image; 86 original = _original; 87 }*/ 88} 89[System.Serializable] 90public class Item 91{ 92 Item(int _count,AssetData _data) 93 { 94 data = _data; 95 count = _count; 96 } 97 public AssetData data; 98 public int count; 99}

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

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

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

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

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

BeatStar

2021/11/27 05:07

つまり、画像データを持つアイテムをファイルに保存したいが、jsonファイル等だとどうしても(画像が)保存できないっていうことでしょうか? もしそうなら、バイナリファイルで保持するしかないと思います。 それか、単純に「画像ファイル」とJsonファイルで一つと見なすとか。そして画像データの部分はファイル名で保持しているとする。読み込むときはJsonファイルを読み込み、Jsonファイルの画像データの部分にはファイル名が書かれているのでそれを読み込む……的な感じか。
退会済みユーザー

退会済みユーザー

2021/11/27 05:23

回答ありがとうございます。 ファイル名で保持することで読み込めるのですね... 質問ばかりで申し訳ないのですが、ファイル名で読み込む場合は、ファイルを保存しているフォルダの パスを統一したほうがいいのでしょうか?
BeatStar

2021/11/27 05:29 編集

複数のファイルを使いたい…とかの意味ですよね? どちらでもいいんじゃないでしょうか。ただ、あちらこちらにやるのはお勧めしません。 一つはデスクトップに、一つは実行ファイルがあるフォルダに、一つはゲームが管理するようなフォルダに…とやるとどこ行ったかわからなくなったり、場合によってはユーザが間違って消してしまうとかもあり得ますし。 そういう問題が無ければどこに置いてもいいのでは。(要は管理さえできればいい) まあ、その意味では出来る限りフォルダパスは統一した方がいいですが。 単純に「決め打ちでいいか」の意味であれば『仕様等による』でしょうね。
BeatStar

2021/11/27 05:33

あー、でもユーザとして見ると、前者(つまり複数のファイルを扱いたい系)であれば、「指定の場所に一括で置く方がいい」かなと。たとえばPCを買い替えたとかでセーブデータも移動したいとか…ありますよね? 場所がバラバラだとすごい面倒。バラバラでも、一つのフォルダ内にサブフォルダとして階層状態であるのなら問題ない気がします。(丸ごと移動させればいいだけだし)
退会済みユーザー

退会済みユーザー

2021/11/27 05:44

ありがとうございます。納得です。 メインフォルダに入っているファイルをサブフォルダで管理して、読み込めるようにしよう思います。 本当にありがとうございます!
BeatStar

2021/11/27 05:50

あ、ちなにみにここ(私の回答っぽいやつとか)はあくまで修正依頼の欄なので今のままだと「未解決」状態なので上記で解決したのなら「自己解決」のやつがあるのでそれで『どのように解決したか』とかを書いてください。(本来は私も下記の回答欄に書くべきですが、単なる一般ユーザ的な立ち位置で書いたのでここに書いています) 今回の場合、「メインフォルダに入っているファイルをサブフォルダで管理して」云々とかでしょうね。
退会済みユーザー

退会済みユーザー

2021/11/28 03:21

分かりました。ある程度実装が完了したら、使用したコードと一緒に「自己解決」の欄に 書かせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問