クリアメモリ

プログラミングやガジェットレビュー、便利なアプリケーションなど雑多に記録するブログ

【Unity】スワイプ処理をUnityアプリに追加してみた

f:id:clrmemory:20171119134157j:plain

こんにちはクリアメモリです!

Unityアプリをスマホ版でリリースする時に、スマホ特有のタッチ操作を実装したい時がありますよね。

 

今回はその中で「スワイプ」をアプリに実装する方法を紹介します。

今回は画面移動でスワイプが実装するのですが、他の処理をする時にも使えるのでぜひ覚えておいてください。

 

 

はじめに

 

まずは「スワイプ処理を追加するスクリプト」「移動するカメラ」を用意しておいてください。

今回スワイプに使う方法は「タップした位置」と「タップを話した位置」で場所が変わったらスワイプする、というような処理を実装してみました。

 

簡単なコードで応用も利くので、スマホアプリにはとりあえず実装しておくことをお勧めします。

では、早速コードの紹介に入ります。

 

スワイプ用のコードを書く

 

今回使うコードは以下のようなものです。

using UnityEngine;
using System.Collections;

public class Swipe : MonoBehaviour {

  public float StartPos;
  public float EndPos;

  Camera mainCamera;

  void Start(){
      mainCamera = GameObject.Find ("MainCamera").GetComponent ();
  }
  void Update () {

    if (Input.GetMouseButtonDown (0)) {
            StartPos = mainCamera.ScreenToWorldPoint (Input.mousePosition).x;
        }
        if (Input.GetMouseButtonUp (0)) {
            EndPos = mainCamera.ScreenToWorldPoint (Input.mousePosition).x;
            if (StartPos > EndPos) {
                mainCamera.transform.position = new Vector3 (main.transform.position.x + 10, main.transform.position.y, -10);
            }else if (StartPos < EndPos) {
                mainCamera.transform.position = new Vector3 (main.transform.position.x - 10, main.transform.position.y, -10);
            }
            StartPos = 0;
            EndPos = 0;
        }
    }
}

このようなコードを追加するだけでスワイプを実装することができます。

ではここからコードの詳しい解説に入ります。

 

コードの解説

 

まず、mainCamera = GameObject.Find(“MainCamera”).GetComponent<Camera>( );でカメラを取得します。MainCameraの部分は、自分の環境に合わせて名前を変更してください。

 

続いて if(Input.GetMouseButtonDown(0)){ にStartPosの値を書きます。

StartPos には mainCamera.ScreenToWorldPoint(Input.mousePosition).x; でタップした位置を取得しています。

この処理はPCで動かした際にも動作を確認できるので便利です。

StartPosでタップを開始した位置が取得できたので、次はタップを話した位置を取得します。

 

if(Input.GetMouseButtonUp(0)){ はタップ(クリック) を終了したら、という意味のコードです。

ここでは「タップを離したらEndPosにタップを離した位置を入れる」という使い方をしています。

先ほどと同じように「mainCamera.ScreenToWorldPoint(Input.mousePosition).x;」はタップをした位置です。

 

さらに同じタイミングで StartPos と EndPosの座標の大きさを比べましょう。

if(StartPos >(<) EndPos){ にあるように、もし 2つを比べてStartPosの方が大きかったらカメラを右側に移動し、EndPosの方が大きかったらカメラを左側に移動するという処理になっています。

※スワイプしたあとの処理( カメラの移動 ) の値は自由に変更してください。

 

最後に、StartPosとEndPosの値を0に戻しましょう。

0に戻さないと2回目以降スワイプができず、タップしただけでカメラが移動してしまいます。

注意してください。

 

ここまでコードが書けたら、実際に確認してみてください。

Unityアプリを登録しないで実機テストする方法はこちらからご確認ください。

 

スワイプできていたら完成です。

 

まとめ

 

今回の方法で「Unityアプリにスワイプを実装」することができたと思います。

「スワイプ中にカメラが付いてくる処理」や「スワイプの距離が極端に小さかった場合の処理」は実装しませんでしたが、今回のコードに追記すれば実装できると思います。

 

用途に合わせて自由に変更してみてください。

最近のアプリは、スワイプでカメラ移動させるのが基本のようになっているので、可能な限り実装しておきたいですね。

 

www.clrmemory.com

 

ではまた。

新着記事