###実行環境
・Window10Home
・Unity2018.4.13f1
実現させたいこと
以下にある条件のもと、値を重複せずに取得したいです。
###該当のプログラム
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.IO; 6using System.Linq; 7using System; 8 9public class TextToButton : MonoBehaviour 10{ 11 //public Button button; 12 public int i_n_t; 13 public string st; 14 public GameObject button; 15 public GameObject Can; 16 17 // Start is called before the first frame update 18 void Start() 19 { 20 st = File.ReadAllText(@"C:\TEST\one.txt"); 21 for(int i = 0; i < st.Length; i++)//iが何文字目を表している 22 { 23 //***** ここから値をランダム取得 ***** 24 var quiz = st.Length; 25 var shuffledIndex = Enumerable.Range(0, st.Length).OrderBy(_ => Guid.NewGuid()).ToArray(); 26 i_n_t = shuffledIndex.Select(u => quiz[u]).ToArray(); 27 //***** ここまで ***** 28 int num = i_n_t*50;//x座標を移動 29 GameObject go = Instantiate(button, new Vector3(num,30,0), Quaternion.identity, Can.transform);//Buttonのprefabを作成 30 //Debug.Log(go.transform.childCount); 31 Text text = go.transform.Find("Text").gameObject.GetComponent<Text>(); 32 text.text = st.Substring(i_n_t,1);//一文字ずつボタンを作成 33 } 34 //tx.text = st; 35 } 36 37 // Update is called once per frame 38 void Update() 39 { 40 41 } 42} 43
上記のプログラムにエラーがありまして、i_n_t = shuffledIndex.Select(u => quiz[u]).ToArray();
の部分でquiz[u]
の部分に角かっこ [] 付きインデックスを 'int' 型の式に適用することはできません
と出てしまうため、実行ができない状況です。
上記のプログラムで実現させたいこと
①string型のstに、テキストファイルの中身を取得し代入する。
②stの文字の長さ(文字数)分だけ繰り返す:
1.変数quizにstの長さ(文字数)を代入。
2.変数shuffledIndexで0から始まるquizの行数分を連続して取得、昇順に並び替え、配列に変える。
3.int型の変数i_n_tで、quizの配列にある数字からランダムに取得、配列に変える。
4.int型の変数numで、i_n_tに代入されている数値*50をして、X座標の数値を指定する。
5.Prefab化したゲームオブジェクトbuttonをX座標=numとして、作成。また、Canvasの中に作成させる。
6.5.で作成したオブジェクト名をgoとし、そのオブジェクトに含まれている"Text"を探す。
7.6.で取得したオブジェクト"Text"に、i_n_tの値を〇文字目として1文字のボタンを作成。(例:i_n_t=5なら、5文字目の文字だけをボタンのテキストにする)
###条件【簡潔に伝えさせていただきます】
①one.txtにある中身が何文字かを取得
※今回は、「This is test.」という表記。(13文字)
②1文字1文字文字が書かれたボタンを作成。
例:[T] [h] [i] [s] [] [i] [s] [] [t] [e] [s] [t] [.]
③作成したボタンをランダムに配置させる
例:[s] [s] [i] [] [t] [t] [T] [.] [h] [] [i] [e] [s]
###次のプログラムまでは実装できました
C#
1st = File.ReadAllText(@"C:\TEST\one.txt"); 2 for (int i = 0; i < st.Length; i++)//iが何文字目を表している 3 { 4 5 int num = i * 50;//x座標を移動 6 GameObject go = Instantiate(button, new Vector3(num, 30, 0), Quaternion.identity, Can.transform);//Buttonのprefabを作成 7 //Debug.Log(go.transform.childCount); 8 Text text = go.transform.Find("Text").gameObject.GetComponent<Text>(); 9 text.text = st.Substring(i, 1);//一文字ずつボタンを作成 10 }
実行結果:説明](14f971ac173d7719e6dd910836a1e933.jpeg)](6c368326229396a261bc264f3c17324c.jpeg)
回答1件
あなたの回答
tips
プレビュー