Unityでアプリ制作~タッチ操作を添えて~

1.経緯

なんとなーくUnity環境を構築したので、せっかくだからアプリを作ってみようと。

2.参考サイト

こちらのサイトさんを参考にさせていただきました。
私の環境では環境構築が完了していたので、#2からですね!

Unity入門
https://dotinstall.com/lessons/basic_unity_v2

3.問題に衝突

途中でちょっとしたタイプミスなどありつつ、
なかなか順調に進んでたんですけど、
最後に問題にぶつかりました!

「アプリに書き出してもタッチ操作に反応しない!」

まぁ薄々そんな気はしてました。
だって、スマホに矢印キーはないもの!!!

4.解決

いろいろなサイトを見て回りました!
結果的に作ったコードは以下の通りです!
(赤色の部分以外は、参考サイトを参照してください)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AppUtil : MonoBehaviour
{

    private static Vector3 TouchPosition = Vector3.zero;

    /// <summary>
    /// タッチ情報を取得(エディタと実機を考慮)
    /// </summary>
    /// <returns>タッチ情報。タッチされていない場合は null</returns>
    public static TouchInfo GetTouch()
    {
        if (Application.isEditor)
        {
            if (Input.GetMouseButtonDown(0)) { return TouchInfo.Began; }
            if (Input.GetMouseButton(0)) { return TouchInfo.Moved; }
            if (Input.GetMouseButtonUp(0)) { return TouchInfo.Ended; }
        }
        else
        {
            if (Input.touchCount > 0)
            {
                return (TouchInfo)((int)Input.GetTouch(0).phase);
            }
        }
        return TouchInfo.None;
    }

    /// <summary>
    /// タッチポジションを取得(エディタと実機を考慮)
    /// </summary>
    /// <returns>タッチポジション。タッチされていない場合は (0, 0, 0)</returns>
    public static Vector3 GetTouchPosition()
    {
        if (Application.isEditor)
        {
            TouchInfo touch = AppUtil.GetTouch();
            if (touch != TouchInfo.None)
            {
                return Input.mousePosition;
            }
        }
        else
        {
            if (Input.touchCount > 0)
            {
                Touch touch = Input.GetTouch(0);
                TouchPosition.x = touch.position.x;
                TouchPosition.y = touch.position.y;
                return TouchPosition;
            }
        }
        return Vector3.zero;
    }

    /// <summary>
    /// タッチワールドポジションを取得(エディタと実機を考慮)
    /// </summary>
    /// <param name='camera'>カメラ</param>
    /// <returns>タッチワールドポジション。タッチされていない場合は (0, 0, 0)</returns>
    public static Vector3 GetTouchWorldPosition(Camera camera)
    {
        Vector3 pos = GetTouchPosition();
        pos.z = Mathf.Abs(camera.transform.position.z);
        return camera.ScreenToWorldPoint(pos);
    }

}

/// <summary>
/// タッチ情報。UnityEngine.TouchPhase に None の情報を追加拡張。
/// </summary>
public enum TouchInfo
{
    /// <summary>
    /// タッチなし
    /// </summary>
    None = 99,

    // 以下は UnityEngine.TouchPhase の値に対応
    /// <summary>
    /// タッチ開始
    /// </summary>
    Began = 0,
    /// <summary>
    /// タッチ移動
    /// </summary>
    Moved = 1,
    /// <summary>
    /// タッチ静止
    /// </summary>
    Stationary = 2,
    /// <summary>
    /// タッチ終了
    /// </summary>
    Ended = 3,
    /// <summary>
    /// タッチキャンセル
    /// </summary>
    Canceled = 4,
}

以下、参考にしたサイトです。

UnityでiOS/Android/Editorの共通タッチ処理を実装する
https://qiita.com/tempura/items/4a5482ff6247ec8873df