[超初心者向け]UnityのuGUIでの文字の出し方

Unityで文字を出す、その中身を変える方法です。

#エディタでの準備

ではまずエディタからで準備していきます。

##オブジェクトの配置

0. エディタから[GameObject]>[UI]>[Text]を選びます。
0. タブをGame画面に切り替えて下さい、そうすると、画面の中央に"NewText"と現れます。
![NewTextOnGame.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/45c11ecb-b0dc-6fa3-5f27-1c7f012ca6a5.png)
この状態でとりあえず、文字列が出ています。

0. ヒエラルキーとインスペクタを確認
![HieralchyInspector.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/46e309ee-782c-3cbf-d8bd-730b35c42742.png)

* 表示した文字は、自動的に"Canvas"というGUI表示のレイヤが作られて、その中に入っています。このCanvasは、3D空間と独立して、カメラの方向が変わっても画面に張り付いた状態になります（これがデフォルトで、設定で変えられます）。
* インスペクターを見ると、名前が"Text"になっていて、座標が原点に置かれているのが判ります。PivotがよくあるTransformと違います、これは座標の中心の位置を示しています。
詳しくは以下を見てください。
[Unity マニュアルUIUI リファレンス Visual ComponentsText](http://docs.unity3d.com/ja/current/Manual/script-Text.html)

##設定の変更

0. 位置を変えてみる
インスペクタのPosX,PosYを変更して、表示位置を確認して下さい。
![InspectorPosition.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/5d3593bc-2cc9-9457-962a-2f980b520d59.png)
上下左右に移動できます。Canvasに張り付いているので、z座標を変えても見た目は変わりません。

0. 文字を変えてみる
Text(Script)コンポーネントにあるTextに入力された文字が、表示されている文字列です。これを変えてみてください。
![TextText.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/64121632-9e2d-55da-4fe5-ca1ef8d3068a.png)

0. 大きさや色を変えてみる
更に下のところを変えると、文字の大きさ、色などが変わります。自分の出したい形にしてみましょう
。
![SizeColor.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/91feba25-5ab7-9165-d62c-ac8fd04b4dd8.png)

これら以外も、弄って変化を確かめて、自分の出したい形にしましょう。

#Scriptからのアクセス

ここからは、この文字列の中身を変えられるようにしてみましょう。

##表示変更用のScriptの用意
TextにScriptコンポーネントを用意して、書き換える処理を追加します。

0. 名前を変えておく
文字列か判らなくなると、後から困ります。取り敢えず、名前を変えておきましょう。ここでは点数を出す為の文字列、と仮定して、それが分かり易い名前"ScoreText"にしておきます。
![Scorenamed.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/5330afb5-49ab-50ad-67d9-75cde68f3b90.png)

0. Scriptファイルを用意する
インスペクタの一番下にある[AddCompornent]ボタンを押して、[New Script]を選び、Scriptファイルを生成しコンポーネントに追加します。
![CScreated.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/dff01fb9-4b62-cac3-ae37-074b9da1408e.png)
![CScreatedCompo.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/bae54db7-75a6-1d3d-76c5-53afadc9b927.png)

0. Scriptを編集する 
インスペクタの"ScoreText"(もしくはAssets内の"ScoreText")をダブルクリックして、Scriptを編集します。

```csharp:ScoreText.CS
using UnityEngine;
using System.Collections;
using UnityEngine.UI;  ////ここを追加////

public class ScoreText : MonoBehaviour {

    //点数を格納する変数
    public int score = 0;

    // Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        this.GetComponent<Text>().text = "点数" + score.toString() + "点";
	}
}
```

* このScriptでは、変数`score`の値に入っている値が123なら、「点数123点」と表示されます。
* 何か点数を変えたい時に、この変数`score`を変えます。
* `score.toString()`はint型の変数`score`の値を文字列に変換します。文字列同士を`+`で繋いだ式は全体を文字列として評価され、値が入ります。

##他のスクリプトから値を変える

以下は、当たり判定で相手のタグが"ball"の時に点数が入る例です。

###値を変えたい側のScriptを編集
値を変えたい側のScriptを開いて、`ScoreText`の名前のオブジェクトが見えるように`public`で定義して、演算出来るようにします。

```csharp:Bascket.cs
using UnityEngine;
using System.Collections;

public class Bascket : MonoBehaviour {

	public ScoreText scoreText;　//外部のScoteTextオブジェクトを見えるよう定義
    
    // Use this for initialization
    void Start () {

	}
	
	// Update is called once per frame
	void Update () {

	}
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "ball") {
            scoreText.GetComponent<ScoreText>().score++;
        }
    }
}

```

###UnityエディタのインスペクタでScoreText型のオブジェクトを設定

追加されたpublic宣言がインスペクタに現れるので、それを変更します。`ScoreText`とある部分をクリックして、先ほど作ったScrtiptを選んで下さい。
![global.PNG](https://qiita-image-store.s3.amazonaws.com/0/72979/dcbb40fb-688c-b5de-5a64-def138b143e2.png)
これで値が変わるようになりました。