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

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

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

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

JSON

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

Unity

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

Q&A

解決済

1回答

5295閲覧

Unity Sliderを用いたグラフ作成

Hutax

総合スコア32

C#

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

JSON

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

Unity

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

0グッド

0クリップ

投稿2016/09/20 06:43

編集2016/09/21 02:18

###前提・実現したいこと
現在、Unityを用いてシステムをつくりながら、C#やphp、MySQLなどについて勉強しています。

今回はUnityを用いてグラフを表示したいと考え、多くの記事を参考にしながら続けてきましたが、どうしても実現できず行き詰ってしまったため、質問させていただきました。

今回私が実現したいことは、UnityでJSONを用いてグラフを表示したいです。
グラフにしたいデータは、DBにあるデータをphpから取得し、
Unity側のC#(Graph.cs)でJSONデータを受け取り、それを基に棒グラフを作成したいと考えています。
作成したい棒グラフの概要は、今回のJSONデータでいうと、

  • ○の数と×の数の合計数
  • ○の数

を一本の棒グラフで表示(図1)することができるようにしたいと考えています。

###該当のソースコード
グラフにしたいJSONデータ

[ {"sum":30,"maru":"16","batu":"14"}, {"sum":27,"maru":"22","batu":"5"} ]

Graph.cs

C#

1using UnityEngine; 2using System.Collections; 3using MiniJSON; 4using UnityEngine.UI; 5 6public class Graph : MonoBehaviour 7{ 8 9 Slider _slider; 10 int graph = 0; 11 12 [SerializeField] 13 RectTransform prefab = null; 14 15 public void start() 16 { 17 StartCoroutine("GetJSON"); 18 } 19 20 IEnumerator GetJSON() 21 { 22 WWW www = new WWW("http://localhost/graphjson.php"); 23 yield return www; 24 Debug.Log(www.text); 25 26 if (!string.IsNullOrEmpty(www.error)) 27 { 28 Debug.LogError(string.Format("Fail Whale!\n{0}", www.error)); 29 yield break; 30 } 31 string json = www.text; 32 33 IList List = (IList)Json.Deserialize(json); 34 35 foreach (IDictionary list in List) 36 { 37 long sum = (long)list["sum"]; 38 string maru = (string)list["maru"]; 39 string batu = (string)list["batu"]; 40 41 var item = GameObject.Instantiate(prefab) as RectTransform; 42 item.SetParent(transform, false); 43 var text = item.GetComponentInChildren<Text>(); 44 45 text.text ="合計数 " + sum.ToString() + "問"+ "○の数" + maru.ToString() + "問" + "×の数 " + batu.ToString() + "問"; 46 47 // スライダーのバーの値を指定 しかし、初めに表示されたボタンのスライダーしか値は変わらない 48 _slider = GameObject.Find("Slider").GetComponent<Slider>(); 49 graph = 28;//ゲージの値を設定 50 _slider.value = graph; 51 } 52 } 53 } 54} 55 56

###試したこと 考えたこと
Unityで、棒グラフを作成するには、【Unity】縦棒グラフ作ってみる – LineRender編
のような記事がありましたが、実現したい、JSONを用いてグラフを作成しているようなサイトが見つからず、行き詰っています。

そこで考えたことは、HPゲージでよくみられるスライダーを用いて棒グラフを作成することです。
グラフ図1図1
このように縦にグラフを重ねて表示したいと考えました。
図1の表示例では、○と×の合計数が30で○の数が16という表示です。

Graph.csでは、取得したJSONデータから動的に作成したボタン上にTextとして表示するスクリプトで、今回はあらかじめ、ボタンの子オブジェクトとしてスライダーをコンポーネントし、プレハブとしています。

###エラー、困っていること
Graph.csの表示では、しっかりとJSONから取得したデータをボタン上にテキストとして出力できています。
試しにスライダーのゲージの値を最大値30のうち、28に設定したとこる、作成されたボタン2つの内、初めのボタンだけがゲージの値が28であり、もう片方の値は何変わりませんでした。
調べたところ、子オブジェクトのインスタンス化?をする必要があるのではと考えましたが、いまいち良く分かりません…

どのようなコードを用いれば、動的に作成したボタンに、JSONから取得した値をスライダーのバーの値に反映することができるのでしょうか。

###補足情報
まだプログラミングを始めてまだ間もなく、Unityやphpの知識、理解が追い付いていない点等あり、また拙い文章ではございますが、何卒お力をお借りできませんでしょうか。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

_slider = GameObject.Find("Slider").GetComponent<Slider>();
この部分ですが、これは「Sliderという名前のオブジェクトを見付けて、そのオブジェクトに付いたSliderコンポーネントを_slider変数に代入する」というコードです。

同名のオブジェクトがシーン上に複数ある場合、Unityは最初の1つしか見付けません(各オブジェクトには見えないIDが振られており、同名オブジェクトの中でIDが一番若いものを取得します)。
つまりforeachで幾ら繰り返そうが、対象としているのが「(最初に見付けた)Sliderという名前のオブジェクト」なので1つしか変化しないわけです。

Sliderオブジェクトの名前をそれぞれ変更するなどして、別々のオブジェクトを見付けられるようにすれば解決するかと思います。

投稿2016/09/29 06:14

sakura_hana

総合スコア11427

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

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

Hutax

2016/10/01 08:38

sakura_hana様 ご回答ありがとございます。 .Findで別の名前のsliderを設定したところ、無事すべてのsliderの値が変化しました。 詳しく教えていただき、とても分かりやすかったです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問