TapTapTap!!!(2)~ボタンを出現・消滅させる~

TapTapTap!!!(1)~画面上にボタンを設置する~では画面上に●の表示を行った。今回は追加したボタンに対して一定間隔で出現/消滅させる処理を加えていきたいと思う。

1.ボタンを Prefab に登録する

前回はボタンを追加し任意の Width と Height を設定するところまで行った以下の図は Width:100、Heigth:100 とし、おまけとしてPosX、PosY、PosZ をそれぞれ 0 とした図である。Pos とは Position の略でボタンの位置情報を際している。

前回までの状態

今後、機能を加えていくうちに複数個同時表示や時間差表示などいろいろと使うと思われるため、これを Prefab として追加する。Prefab に追加したら Hierarchy にある Button は削除してしまって構わない。

Prefab(プレハブ)

辞書で調べると「組み立て式家屋、プレハブ(住宅)」といったことが書かれている。予め作っておいて使いたいときにすぐに使えるようにするための機能である。もっと簡単に言うとコピーアンドペーストのコピーを複数個用意できる機能みたいなもの。

 

右側の Project タブ内を右クリック後、[Create] > [Folder] を選択肢 Prefab フォルダを作っておくと良いだろう。一つの階層に複数のデータがあると管理が難しくなる。

フォルダを作った後、前回作ったボタンを Prefab フォルダにドラッグアンドドロップする。これだけでPrefab の登録は完了する。

2. EventSystem にスクリプトを追加する

スクリプトとは簡単に言えば「処理」である。何をいつどのようにしたいかを記載し任意の挙動を再現する。

前回のボタン追加で Hierarchy に EventSystem というものが勝手に追加されているのが確認できると思う。これに対してScriptを追加する。

そのためにはまずスクリプトを記載するためのファイルを用意する必要がある。「1.ボタンを Prefab に登録する」で作成した通りにフォルダを追加する。このときのフォルダ名は Script としておくとわかりやすいと思う。

更に Script フォルダに対して右クリックを行い、[Create] > [C# Script]を選択する。このときファイル名は「ButtonManager」としておく。これをEventSystem にドラッグアンドドロップする。これだけでEventSystem にスクリプトを追加できる。

3.スクリプトに出現消滅のプログラムを書く

2.で作った BottunManager に対して以下の Script を記載した。内容は一定時間でボタンの削除生成を繰り返すというシンプルなものだ。

[cce_csharp]using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ButtonManager : MonoBehaviour {

    // 作成するボタンオブジェクト
    [SerializeField]
    public GameObject button;

    // ボタンを追加するキャンバス
    [SerializeField]
    public GameObject canvas;

    // 出現/消滅時間
    public float timeOut;

    // 経過時間
    private float timeElapsed;

    // 生成したPrefab
    private GameObject prefab;

    // ゲーム開始時の処理
    void Start() {
       createButton();
    }

    // 逐次更新された際の処理
    void Update() {
       timeElapsed += Time.deltaTime;
       if (timeElapsed >= timeOut) {
             // ボタンがあるかないかで生成削除を分ける
             if (prefab != null) {
                GameObject.Destroy(prefab);
             } else {
                createButton();
             }
             timeElapsed = 0.0f;
       }
    }

    // ボタンの生成処理
    private void createButton() {
       prefab = (GameObject)Instantiate(button);
       prefab.transform.SetParent(canvas.transform, false);
    }
}[/cce_csharp]

記載が完了し、 EventSystem をクリックするとButtonManager(Script)が表示されButton,Canvas,TimeOut の三種類が入力項目として現れると思う。それぞれButtonはPrefabから、CanvasはHierarchyから、TimeOut は任意の数値を入力する。

ButtonManagerのスクリプト

あとは実際に動かして挙動を確認してほしい。実際にボタンが出現消滅するはずだ。

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