【Unity】フリック入力を実装してみた

Unity使用者のみなさんこんにちは!Unityを使ってスマホ・タブレットゲームを作る研究をするスマホ・タブレット研究室の編集者です!

今回はUnityでスマホやタブレットなどを作る際に使用できる
フリック入力のテストを実装してみたので
本記事では、そのフリック入力の実装手順を紹介していきたいと思います。
と言っても、とても簡単で汎用性も高いので是非この記事を見て、
自由度の高いゲームにチャレンジしてみてください。


フリック操作の仕組みを解説

フリック操作では指やマウスから入力を取るので、2つの座標が
必要になります。

一つは開始地点、スマホであれば指が触れた位置、PCであれば
クリックした位置になります
二つ目は終了地点、スマホであれば指が離れた地点、PCであれば
クリックを終えた地点です

この二つの座標の差分を計算して実装する流れになります

フリックの実装

実際にフリック入力を作っていきます。

下準備

まず初めに適当なcubeとplaneを配置して、cubeをplaneの上に置きます。
cubeには物理演算に使用する「BoxCollider」と「Rigdbody」を
付けておきます。

スクリプトの作成

今回はcubeにアタッチするFlickScriptのみを使用します。
以下を作成してcubeに貼り付けましょう。

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

public class FlickScript : MonoBehaviour
{
    Vector3 startTouchPos;
    Vector3 endTouchPos;

    float flickValue_x;
    float flickValue_y;

    Rigidbody player_rb;

    [SerializeField] float jumpPower = 10.0f;

    void Start()
    {
        player_rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0) == true)
        {
            startTouchPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z);
        }
        if (Input.GetMouseButtonUp(0) == true)
        {
            endTouchPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z);
            FlickDirection();
            GetDirection();
        }
    }

    void FlickDirection()
    {
        flickValue_x = endTouchPos.x - startTouchPos.x;
        flickValue_y = endTouchPos.y - startTouchPos.y;
    }

    void GetDirection()
    {
        if (flickValue_x > 500.0f)
        {
            transform.position -= new Vector3(0, 0, 3);
        }

        if (flickValue_x < -500.0f)
        {
            transform.position += new Vector3(0, 0, 3);
        }

        if (flickValue_y > 500.0f)
        {
            player_rb.velocity += new Vector3(0, jumpPower, 0);
        }
    }
}

スクリプト解説

〇関数の解説:FlickDirection()

FlickFirection関数

この関数ではflickValueの値をendTouchPosからstartTouchPosを引いて
計算します、つまり、どのくらいの量フリックしたかを計算してます。

〇関数の解説:GetDirection()

GetDIrection関数

この関数では先ほどのFlickDirection関数で計算してたflickValueの値が、一定
以上の大きさだったらpositionが変化するといった処理を行っています

この処理がない場合、ただ画面に触れただけでflickValueが計算されてしまい
移動してしまうからです、それを防ぐために
「ある一定以上のフリックが発生した時」という条件が必要になります。

完成!

これでフリック操作での移動の実装は終了です。
フリック入力は様々なゲームの操作の幅が広がると思うので
積極的に使っていきたいです。


この記事が気に入ったらサポートをしてみませんか?