【Unity】スクリプトからテキストを書き換える方法

先日、Unityでタップ処理を追加する方法という記事の中で「タップされた回数をテキストで表示する」という方法をとりました。

 

Unityなら簡単にコードからテキストを書き換えることができるので紹介します。

はじめに

 

前回紹介した方法は以下の記事から確認してください。

 

この記事で紹介している動画を見ていただけると「テキストをコードから書き換える」という動作がよりわかりやすくなると思います。

今回の動作はUnityを使って確認しています。

 

では今回使うオブジェクトを作っていきましょう。

 

今回使うオブジェクトは:

  1. テキストのオブジェクト
  2. コード
  3. カメラ
  4. 当たり判定のオブジェクト
  5. その他、動作を見やすくするためのオブジェクト

です。

 

まず作っていきましょう。

 

オブジェクトを配置する

 

私は「カメラ」「TAPというテキスト」「回数を数えるテキスト」「当たり判定のボタン」を作りました。

テキストを書き換えるだけなら「回数を数えるテキスト」だけあれば十分です。

 

配置が完了したらいよいよコードを書いてみましょう。

今回のコードでは「ボタンをクリックした回数を数える」という処理にしてあります。

 

コードを書く

 

まず結論から申しますと、以下のようなコードを書けばテキストをコードから書き換えることができます。

(コードの後に解説してあります)

 

using UnityEngine;
using System.Collections;
public class Count : MonoBehaviour {
  GameObject button;
  GameObject tapTex;
  GameObject CountTex;
  GameObject mainCamera;
  Camera main;
  int Count;

  // Use this for initialization
  void Start () {
    button = GameObject.Find ("Button");
    tapTex = GameObject.Find ("Tap");
    CountTex = GameObject.Find ("Count");
    mainCamera = GameObject.Find ("Main Camera");
  }

  // Update is called once per frame
  void Update () {
    main = mainCamera.GetComponent ();
    Vector3 mousePos = main.ScreenToWorldPoint (Input.mousePosition);
    Collider2D col = Physics2D.OverlapPoint (mousePos);
    
    if (Input.GetMouseButtonDown (0)) {
      if (col == button.GetComponent <Collider2D> ()) {
        tapTex.GetComponent <MeshRenderer> ().enabled = false;
        CountTex.GetComponent<MeshRenderer> ().enabled = true;
        Count = Count + 1;
      }
    } else if (Input.GetMouseButtonDown (1)) {
      Count = 0;
    }

    if (Count <= 9) {
      CountTex.GetComponent<TextMesh> ().text = string.Format ("0{0}", Count);
    } else {
      CountTex.GetComponent<TextMesh> ().text = string.Format ("{0}", Count);
    }
  }
}

 

このコードの中で「コードからテキストを書き換え」ている箇所は『CountTex.GetComponent<TextMesh>().text = string.Format(“{0}”, Count);』です。

他の部分はテキストの書き換えとは関係ないので、注意してください。

 

では解説していきます。

(今回のコードは、かなり細かく分割しています。実際はもっとまとめることができるので試してみてください)

 

Start( ){}

 

まずStart( ) 内で、各オブジェクトを取得しています。

CountTexを取得していないと、テキストを取得できないので必須です。

 

mousePos

 

この部分でカメラ内のタップした位置を取得します。

より詳しい説明は「タップ処理を実行する方法」で説明しています。

 

よければご覧ください。

 

col

 

タップした位置に当たり判定を発生させます。

こちらもより詳しい説明は「タップ処理を実行する方法」で説明してあります。

 

if(Input.GetMouseButtonDown(0)){}

 

マウスをクリックした位置が「ボタン」のコライダー内だった時の処理です。

TAPテキストを非表示にし、Countテキストを表示します。

 

スクリーンショット 2015-12-28 21.26.45

 

デフォルトではこのようになっていると思ってください。

タップすると以下のように変わっていきます。

 

スクリーンショット 2015-12-28 21.27.42

 

5回クリックしたらこのようになります。

 

else if(Input.GetMouseButtonDown(1)){}

 

右クリックしたら数えた回数を0に戻します。

 

if(Count <= 9){}

 

カウントした回数が0〜9の間なら「0x」という表示にするようになっています。

string.Format(“{0}”, Count) は「Count」を「{0}」に入れるという意味なので、コードでテキストを書き換える時に使えます。

 

Countの値が変わったら、テキストも変わるので「クリックされたらCountを1増やす」という処理をすれば、テキストも1ずつ増えていきます。

 

他にも、例えば「TAP」と書かれたテキストを使わずに「Count」のテキストに「TAP」と書いておけば、無駄なオブジェクトを使わずに済みます。

その場合は if(Count <= 9){ を if(Count != 0 && Count <= 9){ というように「まだタップされていなければ」というように処理を変更してあげてください。

 

もし変更した時は「else{」の方も変更しなければなりません。

 

ちなみにstring.Format(“0{0}”) と string.Format(“{0}”)というように2つを分けているのは「初期設定だと、01と1では表示される位置が違う」からです。

設定を変更すれば問題なく表示できるようになります。

 

 

まとめ

 

今回の方法は「回数を数える」時だけでなく、テキストを書き換える時にも使えます。

Point
例えば:
「こんにちは」TAP
「私は○○○です」TAP
「よろしくお願いします」TAP
非表示

 

というように「タップすることで、会話が進む」というようなRPG要素を作ることもできます。

チュートリアルなど簡単なテキスト表示に活用してみてください。

 

他にもいろいろな使い方があると思うので、ぜひいろいろ試してみてください。

ではまた。

過去にレビューしたアイテム