なんとなくわかるし、ほかの人が書いたコードは見たことあるけど自分で実践で使ったことがないのでやってみる。
あと別件でインスペクタで改行できるTextAreaと言うのも使う
TextArea
stringの前に[TextArea]と付けると改行できる
[SerializeField] private string Title;
[SerializeField, TextArea] private string Contents;
デフォルトだと3行分ぐらいしかエリアがなくて長い文章だと見ずらい
[SerializeField, TextArea(1,10)] private string Contents;
数字を付けるとその行数分エリアができる
List
[SerializeField] private List<string> TitleList = new List<string>();
[SerializeField, TextArea(1, 10)] private List<string> CotentsList = new List<string>();
TextAreaを使ったリストもできた。入力したら広がった
これでuGUIのtextに入れる
private void Start()
{
Text_Title.text = TitleList[0];
Text_Contents.text = CotentsList[0];
}
できた!!!
自作クラスの型をリストにする
クラスを作るのはこんな感じ
[System.Serializable]
public class Blog
{
public string Title;
public string Contents;
}
初めてクラスを作った気がする。本ではやった気がする
そしてこうやって宣言
[SerializeField] private List<Blog> BlogList = new List<Blog>();
インスペクタに出す
インスペクタに出てこない・・・
自作クラスの前に [System.Serializable]を書いたら出てきた!
Elementsの表記を変える
そういえば、Titleのところに文字を入れたらElement1のところがTitleで入れた文字になった。
表示している変数の中にstring型の変数があれば、Elementの文字がstring型と同じになる、という仕様になっているようです。
しかし、見出しを変えるには条件があります。
それは…string型がクラスの変数の中で一番上に表示されていること です。
ですって!たまたまの発見!
意図的にする方法はこのスレッドでいっぱい書かれている
https://forum.unity.com/threads/how-to-change-the-name-of-list-elements-in-the-inspector.448910/
エディタ拡張を使う方法をみゅみゅさんが書いてる。
スクリプトで要素を加える
今回はインスペクタから要素を加えるけど、スクリプトから加える場合
まずリストの中にコンストラクタを作る。
やっぱりなんかやったことある気がする
Javaでやったのか!すっきりした
そして追加
BlogList.Add(new Blog("a", "aaa"));
たぶんこれでいい・・・よく分からない
番号指定してtextに入れる
自作クラスの要素それぞれを別のテキストに入れたい。
Text_Title.text = BlogList.Title[0];
これだとダメって言われる
下みたいにforeachでやったら回って最後のものが入るけど、リストの番号を指定して入れたいんだよな~
というかもう、自作クラス作らずに最初にやったようにタイトルとコンテンツそれぞれリストにしたほうがいいのか?
いやでもまとめたい・・・
・・・あ
Text_Title.text = BlogList[0].Title;
Text_Contents.text = BlogList[0].Contents;
こうか~~~
一時間ぐらい失った~~
今日の成果
がんばりました!はなまるぴっぴだね。
dictionaryもしようかと思ったけどめんどくさいからいいや。