Unityの2Dゲームでゲーム画面をタッチしてオブジェクトを動かすのを実装してみます。モバイルゲームのタッチを検出するイメージですね。
はじめに
Unityのバージョンは「2021.3.14f1」で作成しています。ゲーム画面をタッチしてプレイヤー(オブジェクト)を動かしてみます。モバイルゲームでタッチを検出するイメージです。
実装開始
「2DObject」→「Sprites」→「Square」を追加します。
下記スクリプトを作成します。マウスの左クリックした位置が右側なら右に動かして、左側なら左に動かしています。
using UnityEngine; public class MobileTouch : MonoBehaviour { [SerializeField] private float Speed; void Update() { if (Input.GetMouseButton(0)) { Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (mousePos.x > 0) { transform.Translate(Speed * Time.deltaTime, 0, 0); } else { transform.Translate(-Speed * Time.deltaTime, 0, 0); } } } }
スクリプトを追加して、パラメータをセットします。
実行すると下記のような感じになります。
このままでもモバイルのタッチを検出できますが、もっとモバイルっぽくスクリプトを変更します。
using UnityEngine; public class MobileTouch : MonoBehaviour { [SerializeField] private float Speed; void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); Vector3 touchPos = Camera.main.ScreenToWorldPoint(touch.position); if (touchPos.x > 0) { transform.Translate(Speed * Time.deltaTime, 0, 0); } else { transform.Translate(-Speed * Time.deltaTime, 0, 0); } } } }
Inputを利用してタッチを検出しています。公式リファレンスは下記。「Input.GetTouch(0)」は初めにタッチしたのを検出しています。
試しに実行する時は「Simulator」からモバイルを選んで実行すると動作確認ができます。
InputSystemを利用した実装方法もあるので、機会があればそちらも書きたいです。とりあえずは簡単なタッチの検出方法という感じ。