【Unity】MultilineAttributeを使ってInspectorで複数行テキストを扱う

【Unity】MultilineAttributeを使ってInspectorで複数行テキストを扱う

通常、テキストを扱う時にはTextコンポーネントを使うかと思いますが、自分で作成したスクリプトで複数行テキストを扱いたいことだってあります。

Inspectorウィンドウで文字入力する時に、1行だけじゃなくて複数行表示してくれたらなぁ……みたいな。

そんな時にはMultilineAttributeを使うべし。

 

環境

macOS 10.13 High Sierra

Unity2018.1.0f2

MultilineAttributeについて

直訳すると「複数」「行」「属性」、つまり複数行テキストを扱いたい時に使うAttributeです。

publicまたは[SerializeField]を付けたstringフィールドの前に[Multiline]を付ければOK。

デフォルトでは3行分のエリアが確保されます。

Attributeの宣言時に引数で行数を指定すればその大きさになるため、長めの文章を入れる場合は大きめのエリアを確保しておくといいかも。

サンプル

複数行テキストエリアを表示するサンプルコードは以下の通り。

Inspectorウィンドウで表示するためのAttributeなので、publicか[SerializeField]を付けておくべし。

ソースコードの中でもコメントしていますが、int型やVecotr3型でもAttribute自体は付けられますし、コンパイルエラーにもなりません。

しかし後で紹介するようにInspectorウィンドウで怒られるので、string型だけに使うようにしましょ。

multiSevenLineのように[Multiline(7)]と行数を指定することも可能です。

string型のListを使う場合は、それぞれの要素が複数行になります。個別に行数を変えるのは無理っぽい。

上記のスクリプトを保存し、任意のゲームオブジェクトにアタッチすると以下のように表示されます。

複数行テキストのサンプル
複数行テキストのサンプル

int型やVector3型のフィールドに[Multiline]を付けた場合、コンパイルは通ってもInspectorウィンドウでは『Use Multiline with string. (Multilineはstring型で使ってね)』と怒られます。int型の値に改行コード入るとか意味分かんないからしょうがないね。

Inspectorウィンドウで見えるのは、[Multiline]の引数で指定した行数。デフォルトでは3行となっていますが、これを超えたら文字が入らないなんてことはなく、あくまでスクロールしない範囲の見え方の指定となっています。

5行くらい文字列を入れると、Inspectorウィンドウでは最初の3行だけ見えます。続く行を見たい場合はカーソルを矢印キーで移動させる必要があります。スクロールバーとか出てくると嬉しいんですけどね。なお、横に伸びた時も見切れます。なのでスクロ(ry

スペースとの兼ね合いはありますが、ある程度長文になるならあらかじめ[Multiline(7)]のように大きめに領域を確保しておくとパッと見て分かりやすいと思います。

List<string>のように指定した場合は、リストの各要素で複数行テキストになります。会話文などでリストを使って文字を保持したい場合に便利。行数指定はリスト要素で共通なので注意。

ちなみにスクロールバーを表示させたい場合は、素直に[TextArea]のAttributeを使うのがおすすめです。

まとめ

Inspectorウィンドウで複数行テキストエリアを表示させたい時にはMultilineAttributeを使おう。

指定の方法も簡単なので、長文になりそうなフィールドには付けておくと内容の編集がしやすくなります。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!