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

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

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

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

JSON

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

Unity

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

Q&A

解決済

1回答

1051閲覧

[Unity] jsonファイルを読み取り、ファイルに書かれた値をインスタンスへ反映したい

1800tera

総合スコア13

C#

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

JSON

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

Unity

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

0グッド

1クリップ

投稿2019/02/24 13:32

前提・実現したいこと

1週間くらい前から、Unityで音楽ゲームを製作したくて勉強を始めました。その音楽ゲームでは、譜面のデータをjson形式で扱おうと考えています。
jsonファイルに書かれた値がインスタンスへ反映されたかどうかを調べるため、Debug.Logで表示しようと試みたところ、下記のようなエラーが出てしまいました。
下に示すコードを修正して、インスタンスへ値を反映し、「fumen.name」や「fumen.block」というふうに値をその後の処理で利用したいです。

発生している問題・エラーメッセージ

'MusicDTM'に'name'の定義が含まれておらず、型'MusicDTO'の最初の引数を受け付けるアクセス可能な拡張メソッド'name'が見つかりませんでした。usingディレクティブまたはアセンブリ参照が不足していないかを確認してください。

該当のソースコード

jsonファイルを読み込むために用意したクラスを下に示します。

C#

1//MusicDTM.cs 2using System.Collections.Generic; 3 4namespace NoteEditor.DTO 5{ 6 public class MusicDTO 7 { 8 [System.Serializable] 9 public class EditData 10 { 11 public string name; 12 public int maxBlock; 13 public int BPM; 14 public int offset; 15 public List<Note> notes; 16 } 17 18 [System.Serializable] 19 public class Note 20 { 21 public int LPB; 22 public int num; 23 public int block; 24 public int type; 25 public List<Note> notes; 26 } 27 } 28}

エラーが出ているコードを下に示します。FilePathには、インスペクターから譜面のjsonファイルのパスを入力します。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using NoteEditor.DTO; 5 6public class NoteGenerator : MonoBehaviour 7{ 8 public string FilePath; 9 10 void Start() 11 { 12 MusicDTO fumen = JsonUtility.FromJson<MusicDTO>(FilePath); 13 Debug.Log("name" + fumen.name); 14 } 15 16 void Update() 17 { 18 } 19} 20

以下は、jsonファイルの例です。

json

1{ 2"name":"sample", 3"maxBlock":8, 4"BPM":200, 5"offset":3100, 6"notes":[ 7 {"LPB":4,"num":24,"block":1,"type":1,"notes":[]}, 8 {"LPB":4,"num":32,"block":1,"type":1,"notes":[]}, 9 {"LPB":4,"num":40,"block":1,"type":1,"notes":[]}, 10 ] 11}

試したこと

JsonUtilityのスクリプトリファレンス https://docs.unity3d.com/jp/current/ScriptReference/JsonUtility.html
を読んだり、エラーメッセージの一部で検索をかけてみましたが、どう修正すればよいのか分かりませんでした。

備考

下記のURLの記事を参考にしており、1番目に示したコードはここで紹介されている「NoteEditor」に同梱されているものです。
https://qiita.com/irigoma77/items/ee15b3e748596aa6d086

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

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

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

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

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

guest

回答1

0

ベストアンサー

MusicDTO fumen = JsonUtility.FromJson<MusicDTO>(FilePath);
この行は
MusicDTO.EditData fumen = JsonUtility.FromJson<MusicDTO.EditData>(FilePath);
こうじゃないかと思います。(動作するかは未検証)

投稿2019/02/24 17:01

sakura_hana

総合スコア11425

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問