発生している問題・実現したいこと
現在動いている情報を見るために、TextFieldを使ったのですが正直座標設定などが非常に面倒くさいので、 自動化をしたいと考えました。 OnGUIはvoid Updata()のように毎回処理されるという特徴があります。 そこで、Tagを指標とし新しいTagだった場合x,y座標をArrayCSaveへstring型で格納、TagをArrayTagSaveへ代入します。 逆に、すでに同じTagがあった場合は、ArrayTagSaveに格納されているTagの要素数を使い、ArrayCSaveからTagの座標を取得し表示したいです。 「すでに同じTagがあった場合」という部分ですね。 If文を使い、要素数を取得しようとプログラムを組んだのですが、 Array.IndexOfを使っても-1しか返ってきません。 ArrayTagSaveに毎回、Tagが代入されていることは確認済みです。 原因が突き止められません。教えていただけると幸いです。
該当のソースコード
C#
1public class RealTimeInfo : MonoBehaviour 2{ 3 void Start() 4 { 5 OnGUI(); 6 } 7 void OnGUI() 8 { 9 GUI_Support GUI_S = new GUI_Support(); 10 GUI_S.Auto_TextField("test", "test_Tag"); 11 GUI_S.Auto_TextField("nn", "nn_Tag"); 12 } 13} 14 15interface GUI_Support_OrderList 16{ 17 void Auto_TextField(string MainText, string Tag); 18} 19 20public class GUI_Support : GUI_Support_OrderList 21{ 22 WordControl Wc = new WordControl(); 23 private ushort ACx = 0, 24 ACy = 0; 25 private ushort[] ArrayTextLength = new ushort[0]; 26 private string[] ArrayTagSave = new string[0]; 27 private string[] ArrayCSave = new string[0]; 28 //一文字をX = 15とする 29 //Y = 20とする 30 //文字を表示する 31 //表示したい文字を取得→タグと一致していれば、そのタグの要素数から座標を取得しその座標に文字を表示 32 // タグと一致していなければ、新しく配列を作成しタグと座標を代入 33 public void Auto_TextField(string MainText, string Tag) 34 { 35 short GetArrayTagSave = Convert.ToInt16(Array.IndexOf(ArrayTagSave, Tag)); 36 if (GetArrayTagSave == -1) 37 { 38 Array.Resize(ref ArrayTextLength, ArrayTextLength.Length + 1); 39 Array.Resize(ref ArrayTagSave , ArrayTagSave.Length + 1); 40 Array.Resize(ref ArrayCSave , ArrayCSave.Length + 1); 41 if (1920 >= ACy) 42 { 43 ACy = 0; 44 ACx = Convert.ToUInt16(Convert.ToInt32(ArrayTextLength.Max()) + 10); 45 } 46 ArrayCSave[ArrayCSave.Length - 1] = Convert.ToString(ACx) + "," + Convert.ToString(ACy); 47 ushort MainTextLength = Convert.ToUInt16(MainText.Length * 15); 48 ArrayTextLength[ArrayTextLength.Length - 1] = MainTextLength; 49 ArrayTagSave[ArrayTagSave.Length - 1] = Tag; 50 GUI.TextField(new Rect(ACx, ACy, ACx + MainTextLength, 20), MainText); 51 ACy += 20; 52 } 53 else 54 { 55 int ACx_TArray = 0; 56 int ACy_TArray = 0; 57 Wc.GetTwoWord(ArrayCSave[GetArrayTagSave], ref ACx_TArray, ref ACy_TArray); 58 ushort MainTextLength = Convert.ToUInt16(MainText.Length * 15); 59 GUI.TextField(new Rect(ACx_TArray, ACy_TArray,ACx_TArray + MainTextLength, 20), MainText); 60 } 61 } 62} 63 64public class WordControl 65{ 66 public void GetTwoWord(string word, ref int FirstWord, ref int SecondWord) 67 { 68 FirstWord = Convert.ToInt32(word.Substring(0, word.IndexOf(","))); 69 SecondWord = Convert.ToInt32(word.Substring(word.IndexOf(",") + 1, word.Length)); 70 } 71}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。