TapTapTap!!!(5)~ボタン出現時に文字を表示する~

TapTapTap!!!(4)~ボタンをランダムに出現させる~ではボタンが出現する際にランダムな位置に出現する処理を加えた。今回はタップしたときに[Tap!]という文字を表示する処理を加える。

今回はテキストオブジェクトの作成とボタンタップ時の処理を行っていく。

1.テキストオブジェクトの作成

テキストオブジェクトは  [GameObject] > [UI] > [Text] を選択することで新規に作成することができる。

テキストオブジェクトの作成

作成したテキストオブジェクトは新規のテキストオブジェクトを選択し [Inspector] > [Text(Script)] のテキストを変更することで好きなテキストに変更できる。

テキストの変更

作成したテキストオブジェクトは Prefab に登録しておく。 Prefab への登録はTapTapTap!!!(2)~ボタンを出現・消滅させる~を参考にしてほしい。

2.ボタンをタップした際にテキストを表示する

タップ後にテキストを表示するためには以下のスクリプトを記載すること実現することができる。内容としては canvas の座標とボタンの座標を取得し、テキストオブジェクト作成後、指定座標上にテキストオブジェクトの位置を変更する。

[cce_csharp]using UnityEngine;

public class ButtonAction : MonoBehaviour {
    // 作成するボタンオブジェクト
    [SerializeField]
    public GameObject text;

    // テキストを表示後、消滅するまでの時間
    public float destroyTime;


    // クリック(タップしたときの処理)
    public void OnClick() {
        // 世界座標系
        Vector3 worldPosition = this.gameObject.transform.position;
        // canvas オブジェクトの取得
        GameObject parent = this.gameObject.transform.root.gameObject;

        Vector3 parentPosition = parent.transform.position;
        Vector3 position = new Vector3(worldPosition.x - parentPosition.x, worldPosition.y - parentPosition.y, 0);

        // 自身が登録されているオブジェクトを削除する
        Destroy(this.gameObject);

        //指定位置のテキストを表示
        GameObject prefab = (GameObject)Instantiate(text);
        prefab.transform.position = position;
        prefab.transform.SetParent(parent.transform, false);
        Destroy(prefab, destroyTime);
    }
}[/cce_csharp]

今回、プログラムで詰まったところがあったためメモ的に残しておく。間違えていたときの処理は以下の通り。ボタン座標をそのままテキストオブジェクトの座標に適応使用とした。これは世界座標に画面座標を適応しているのだ。上のプログラムでは世界座標を無理やり画面座標に合わせている。この世界座標、画面座標は後日解説したいと思う。

[cce_csharp]    // クリック(タップしたときの処理)
    public void OnClick() {
        // ボタン座標
        Vector3 buttonPosition = this.gameObject.transform.position;
        Vector3 position = new Vector3(buttonPosition .x, buttonPosition .y, 0);

        // 自身が登録されているオブジェクトを削除する
        Destroy(this.gameObject);

        //指定位置のテキストを表示
        GameObject prefab = (GameObject)Instantiate(text);
        prefab.transform.position = position;
        prefab.transform.SetParent(parent.transform, false);
        Destroy(prefab, destroyTime);
    }[/cce_csharp]
%d人のブロガーが「いいね」をつけました。