ゼニガネブログ

ゲーム開発のための小ネタなど。現在はUnityメインでやってます

【Unity】Inspectorで文字列を複数行入力する

どうやる?

UIのテキストみたいに改行できる入力欄が欲しいと思って調べたところ[Multiline]もしくは[TextArea]をつけるだけという超お手軽仕様でした。

[XXXX]部分はAttributeと言ってC#の機能になります。それをUnityエディタが解釈してエディタ上での振る舞いを変更しています。一番頻出なのはpublicではない変数もInspectorに表示してくれる[SerializeField]あたりでしょうか。 

サンプル

f:id:zenigane138:20180731220623p:plain

f:id:zenigane138:20180731221021g:plain

test1のように[Multiline]もしくは[TextArea]がついていない改行コードを含む文字列は一行ずつ表示されます。ハイパー見辛い上に編集をミスっても気が付きにくいのでおとなしくAttributeをつけておきましょう。

実はtest2test1はほぼ同じ挙動になります。普段よく使っている文字列入力欄は[Multiline(1)]と指定した物と大差ないです。この(1)ですが1行の入力枠を作るという事を示しています。

test3[MultiLine(3)]で3行の入力枠を作っています。また、引数を省略した場合にも3行の入力枠が作成されます。

test4[TextArea(1,3)]で最小1行、最大3行の入力枠を作成しています。test5は最大が6行になっているだけです。

[MultiLine]と[TextArea]の違いなど

[Multiline][TextArea]の違いですが、[TextArea]の方がより高機能になっています。

[Mulitline]はスクロールバーが表示されません。また最小n行の指定がないので文字が空でも指定した行分のスペースを確保します。

もう一つの違いが、画面端の自動改行がオフになります。これはメリットともデメリットともとれますね。見かけ上の改行なので実際の文字列に\nが入ったりはしませんが自動改行なのか自前改行なのかちょっとわかりづらいですね。

f:id:zenigane138:20180731225015p:plain

ただ、基本的に[TextArea]を使うようにすればいいと思います。

 

改行コードなど

Enterで改行できます。Inspectorで入力した改行の改行コードは\nになります。
Inspectorで直接\nと入力した場合はエスケープが効き改行にはならず、\\nになります。

ソースコード側で\nもしくは\r\nと入力すると改行されます。Inspectorでの見た目は完全に同じになります。
\r\nはInspectorの編集を経由しても\r\nのまま扱われますが、一度改行を消して再入力した場合は\nになります。

参考リンク

第2章 標準で使えるエディター拡張機能 - エディター拡張入門

Unity - Scripting API: TextAreaAttribute