TapTapTap!!!(6)~点数機能を追加する~

TapTapTap!!!(5)~ボタン出現時に文字を表示する~ではタップしたときに[Tap!]という文字を表示する処理を加えた。今回は、ボタンをタップしたときに点数を追加する処理を加える。

1.点数用のテキストオブジェクトを作成する

テキストの作成方法についてはTapTapTap!!!(5)~ボタン出現時に文字を表示する~に記載しているため省略する。ただし、ここでは点数のため初期値は 0 としておくことをおすすめする。

また、点数表示位置は任意の位置に調整してもらえばいいだろう。

2.点数を計算するスクリプトを作成する

スクリプトの作成についてはTapTapTap!!!(2)~ボタンを出現・消滅させる~に記載しているため省略する。ここではScore というスクリプトを作成する。

Score では点数の管理および表示を行う。変更するスクリプトは以下の2つ

・ButtonAction

ボタンがタップされたときに点数を加算する処理を加える

・Score

点数が加算されたときに加算された点数を表示する

 

まず、ButtonActionについては以下の通り。

[cce_csharp]using UnityEngine;

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

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

    // ボタンタップ時に獲得できるポイント
    public int point;
    
    // クリック(タップしたときの処理)
    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);

        // タップされてボタンが消されたときに得点を加算する 
        FindObjectOfType<Score>().addPoint(point);

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

変更内容としてはタップされてボタンが消失した際に、Scoreに対してポイントを追加するという処理を加えている。つまり以下の一文を追加とボタンが持つポイントを設定するのみである。

[cce_csharp]        // タップされてボタンが消されたときに得点を加算する 
        FindObjectOfType<Score>().addPoint(point);[/cce_csharp]

続いて Score のスクリプトを作成する。こちらのスクリプトはポイント加算関数が実行されときに合計ポイントを加算しその結果をテキスト上に表示するものである。

[cce_csharp]using UnityEngine;
using UnityEngine.UI;

public class Score : MonoBehaviour {

    // 作成するボタンオブジェクト
    public Text pointText;
    // 合計ポイント
    private int point = 0;

    //ポイントの加算処理
    public void addPoint(int p) {
        point += p;
        pointText.text = point.ToString();
    }

}[/cce_csharp]

上記スクリプトが完成したら、EventSystemにドラッグアンドドロップしよう。

そうすると、スクリプ内で表示に用いるテキストを選択する画面がつかされるだろう。

%d人のブロガーが「いいね」をつけました。