先日、Unityでタップ処理を追加する方法という記事の中で「タップされた回数をテキストで表示する」という方法をとりました。
Unityなら簡単にコードからテキストを書き換えることができるので紹介します。
もくじ
はじめに
前回紹介した方法は以下の記事から確認してください。
この記事で紹介している動画を見ていただけると「テキストをコードから書き換える」という動作がよりわかりやすくなると思います。
今回の動作はUnityを使って確認しています。
では今回使うオブジェクトを作っていきましょう。
今回使うオブジェクトは:
- テキストのオブジェクト
- コード
- カメラ
- 当たり判定のオブジェクト
- その他、動作を見やすくするためのオブジェクト
です。
まず作っていきましょう。
オブジェクトを配置する
私は「カメラ」「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テキストを表示します。
デフォルトではこのようになっていると思ってください。
タップすると以下のように変わっていきます。
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では表示される位置が違う」からです。
設定を変更すれば問題なく表示できるようになります。
まとめ
今回の方法は「回数を数える」時だけでなく、テキストを書き換える時にも使えます。
「こんにちは」TAP
「私は○○○です」TAP
「よろしくお願いします」TAP
非表示
というように「タップすることで、会話が進む」というようなRPG要素を作ることもできます。
チュートリアルなど簡単なテキスト表示に活用してみてください。
他にもいろいろな使い方があると思うので、ぜひいろいろ試してみてください。
ではまた。