第03回 タッチパネル対応

kyusyukeigo edited this page Feb 26, 2015 · 1 revision
Clone this wiki locally

この回はモバイル編第02回終了時点のプロジェクトを使用します。

3.1 タッチパネルに対応させる

モバイルの多くはキーボードによる操作ではなく、タッチパネルによる操作でゲームをプレイします。

そのためゲーム制作編の03. プレイヤーから弾を撃つで行ったXキーでゲームスタートを画面をタッチしたらゲームスタートというように変更を行います。

Unity Remote

今回、Unity Remoteというアプリを使用すると、簡単にタッチ対応の確認ができます。

Unity Remote

Unity RemoteはAndroidやiOSゲームを作成する際に、Unity Editorのゲームビューに表示されているゲームの動きを端末上で確認することが出来るアプリです。ただ確認するだけではなく、タッチ情報やジャイロなどのセンサー系なども取得することが出来ます。これにより、プロジェクトをビルドすることなく、モバイル特有の動作を確認することが可能です。

Unity Remote ( Google Play )

Android版のUnity RemoteはUSBを使用します。USBでPCをつなげると利用することが出来ます。

Unity Remote 3 ( Apple Store )

iOS版のUnity RemoteはWi-Fiを使用します。同じWi-Fi環境内であれば利用することが可能です。

もし、うまくいかない場合は一度Unity Editorを再起動してみてください。

タイトルの変更

タイトルの「Press X」を「Tap To Start」へ変更します。ゲームオブジェクト名とGUI TextコンポーネントのTextをTap To Startへ変更してください。

Touchクラスでタッチ情報を取得する

タッチ情報を取得するにはTouchクラスを使用します。それに加え、エディター上でも動かせるようにマウスクリックでゲームをスタートさせるようにしてみましょう。

Manager.cs

using UnityEngine;

public class Manager : MonoBehaviour
{
    // Playerプレハブ
    public GameObject player;

    // タイトル
    private GameObject title;

    void Start ()
    {
        // Titleゲームオブジェクトを検索し取得する
        title = GameObject.Find ("Title");
    }

    void Update ()
    {

        for (int i = 0; i < Input.touchCount; i++) {

            // タッチ情報を取得する
            Touch touch = Input.GetTouch (i);

            // ゲーム中ではなく、タッチ直後であればtrueを返す。
            if (IsPlaying () == false && touch.phase == TouchPhase.Began) {
                GameStart ();
            }
        }

        // ゲーム中ではなく、マウスクリックされたらtrueを返す。
        if (IsPlaying () == false && Input.GetMouseButtonDown (0)) {
            GameStart ();
        }
    }

    void GameStart ()
    {
        // ゲームスタート時に、タイトルを非表示にしてプレイヤーを作成する
        title.SetActive (false);
        Instantiate (player, player.transform.position, player.transform.rotation);
    }

    public void GameOver ()
    {
        FindObjectOfType<Score> ().Save ();
        // ゲームオーバー時に、タイトルを表示する
        title.SetActive (true);
    }

    public bool IsPlaying ()
    {
        // ゲーム中かどうかはタイトルの表示/非表示で判断する
        return title.activeSelf == false;
    }
}

ゲームを再生してみましょう。ゲームビュー上でマウスクリック、Unity Remote上で画面をタップしてゲームが開始すれば正常です。

Eventからタッチ情報を取得する

Touchクラスでタッチ情報を取得しましたが、次はEventクラスを利用してタッチ情報を取得します。

Updateメソッドは削除して、OnGUIメソッドを作成してください。Eventクラスのイベント情報はOnGUIメソッドの中で扱うことが可能です。

Manager.cs

using UnityEngine;

public class Manager : MonoBehaviour
{
    // Playerプレハブ
    public GameObject player;

    // タイトル
    private GameObject title;

    void Start ()
    {
        // Titleゲームオブジェクトを検索し取得する
        title = GameObject.Find ("Title");
    }

    void OnGUI ()
    {
        // ゲーム中ではなく、タッチまたはマウスクリック直後であればtrueを返す。
        if (IsPlaying () == false && Event.current.type == EventType.MouseDown) {
            GameStart ();
        }
    }

    void GameStart ()
    {
        // ゲームスタート時に、タイトルを非表示にしてプレイヤーを作成する
        title.SetActive (false);
        Instantiate (player, player.transform.position, player.transform.rotation);
    }

    public void GameOver ()
    {
        FindObjectOfType<Score> ().Save ();
        // ゲームオーバー時に、タイトルを表示する
        title.SetActive (true);
    }

    public bool IsPlaying ()
    {
        // ゲーム中かどうかはタイトルの表示/非表示で判断する
        return title.activeSelf == false;
    }
}

ゲームを再生してみましょう。ゲームビュー上でマウスクリック、Unity Remote上で画面をタップしてゲームが開始すれば正常です。

第03回終わり

今回はここで終了です。つまずいてしまった方はプロジェクトファイルをダウンロードして新たな気持ちで次の回へ進みましょう。

今回のプロジェクトファイルをダウンロード