第03回 タッチパネル対応
この回はモバイル編第02回終了時点のプロジェクトを使用します。
モバイルの多くはキーボードによる操作ではなく、タッチパネルによる操作でゲームをプレイします。
そのためゲーム制作編の03. プレイヤーから弾を撃つで行ったXキーでゲームスタートを画面をタッチしたらゲームスタートというように変更を行います。
今回、Unity Remoteというアプリを使用すると、簡単にタッチ対応の確認ができます。
Unity RemoteはAndroidやiOSゲームを作成する際に、Unity Editorのゲームビューに表示されているゲームの動きを端末上で確認することが出来るアプリです。ただ確認するだけではなく、タッチ情報やジャイロなどのセンサー系なども取得することが出来ます。これにより、プロジェクトをビルドすることなく、モバイル特有の動作を確認することが可能です。
Android版のUnity RemoteはUSBを使用します。USBでPCをつなげると利用することが出来ます。
iOS版のUnity RemoteはWi-Fiを使用します。同じWi-Fi環境内であれば利用することが可能です。
もし、うまくいかない場合は一度Unity Editorを再起動してみてください。
タイトルの「Press X」を「Tap To Start」へ変更します。ゲームオブジェクト名とGUI TextコンポーネントのTextをTap To Startへ変更してください。
タッチ情報を取得するには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上で画面をタップしてゲームが開始すれば正常です。
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上で画面をタップしてゲームが開始すれば正常です。
今回はここで終了です。つまずいてしまった方はプロジェクトファイルをダウンロードして新たな気持ちで次の回へ進みましょう。
第01回 スプライトとスプライトアニメーションの作成
第02回 プレイヤーの移動
第03回 プレイヤーから弾を撃つ
第04回 敵を作成しよう
第05回 当たり判定とアニメーションイベントとレイヤー
第06回 背景を作る
第07回 Wave型の仕組み作り
第08回 音をつける
第09回 プレイヤーの移動制限と様々な修正
第10回 タイトルを付ける
第11回 エネミーのHP、弾の攻撃力、アニメーションの追加
第12回 Waveを5個にする、スコアの実装
第01回 複数の解像度に対応する(黒帯を追加する)
第02回 複数の解像度に対応する(引き伸ばす)
第03回 タッチパネル対応
第04回 バーチャルジョイスティック対応