Unityで文字を出す、その中身を変える方法です。
#エディタでの準備
ではまずエディタからで準備していきます。
##オブジェクトの配置
-
エディタから[GameObject]>[UI]>[Text]を選びます。
-
タブをGame画面に切り替えて下さい、そうすると、画面の中央に"NewText"と現れます。
この状態でとりあえず、文字列が出ています。
- 表示した文字は、自動的に"Canvas"というGUI表示のレイヤが作られて、その中に入っています。このCanvasは、3D空間と独立して、カメラの方向が変わっても画面に張り付いた状態になります(これがデフォルトで、設定で変えられます)。
- インスペクターを見ると、名前が"Text"になっていて、座標が原点に置かれているのが判ります。PivotがよくあるTransformと違います、これは座標の中心の位置を示しています。
詳しくは以下を見てください。
Unity マニュアルUIUI リファレンス Visual ComponentsText
##設定の変更
-
位置を変えてみる
インスペクタのPosX,PosYを変更して、表示位置を確認して下さい。
上下左右に移動できます。Canvasに張り付いているので、z座標を変えても見た目は変わりません。 -
文字を変えてみる
Text(Script)コンポーネントにあるTextに入力された文字が、表示されている文字列です。これを変えてみてください。
-
大きさや色を変えてみる
更に下のところを変えると、文字の大きさ、色などが変わります。自分の出したい形にしてみましょう
。
これら以外も、弄って変化を確かめて、自分の出したい形にしましょう。
#Scriptからのアクセス
ここからは、この文字列の中身を変えられるようにしてみましょう。
##表示変更用のScriptの用意
TextにScriptコンポーネントを用意して、書き換える処理を追加します。
-
名前を変えておく
文字列か判らなくなると、後から困ります。取り敢えず、名前を変えておきましょう。ここでは点数を出す為の文字列、と仮定して、それが分かり易い名前"ScoreText"にしておきます。
-
Scriptファイルを用意する
インスペクタの一番下にある[AddCompornent]ボタンを押して、[New Script]を選び、Scriptファイルを生成しコンポーネントに追加します。
-
Scriptを編集する
インスペクタの"ScoreText"(もしくはAssets内の"ScoreText")をダブルクリックして、Scriptを編集します。
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
で定義して、演算出来るようにします。
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を選んで下さい。
これで値が変わるようになりました。