【Unity2D】スワイプでオブジェクトを上下左右自由自在に動かす方法

  • スワイプでオブジェクトを動かしたい
  • 左右とか上下なら動かせるのだが
  • 右上とかには動かせないな

このような悩みを解決します。

この記事にはスワイプでオブジェクトを上下左右や右上や左下まで自由自在に動かせる方法が書いています。

こんな感じで動かせるようになります。2Dで作っていますが、3Dで動かす場合でも参考になります。

目次

スワイプでオブジェクトを上下左右を動かす方法

前提条件

オブジェクトにスクリプトをアタッチしている状態にしてください。そのスクリプトに記述していきます。

わからない人はUnityでC#スクリプトを作成してアタッチする方法【基本知識】を見てね。

ちなみにこの記事でうごかしているオブジェクトは、ヒューマンピクトグラムさんの画像を使っています。

ゲーム素材を集めるときにも使えるサイトなので、見てみてね。

スクリプト

スクリプト

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

public class PlayerController : MonoBehaviour
{
    // 変数宣言
    float x_speed = 0;
    float y_speed = 0;
    Vector2 startPos;

    // Use this for initialization
void Start()
{

    }

    // Update is called once per frame
void Update()
{
        // メソッドを呼び出す
        MoveSwipe();
}

    // スワイプして上下左右に動かす
    void MoveSwipe()
    {
        // マウスが左クリックされたとき
        if (Input.GetMouseButtonDown(0))
        {
            // マウスをクリックした座標
            this.startPos = Input.mousePosition;
        }
        else if (Input.GetMouseButtonUp(0))
        {
            // マウスを離した座標
            Vector2 endPos = Input.mousePosition;

            float x_swipeLength = endPos.x - this.startPos.x;
            float y_swipeLength = endPos.y - this.startPos.y;

            // スワイプの長さを速度に変換する
            this.x_speed = x_swipeLength / 250.0f;
            this.y_speed = y_swipeLength / 250.0f;
        }

        // オブジェクトを上下左右に動かす
        transform.Translate(this.x_speed, this.y_speed, 0);

        // 減速させる
        this.x_speed *= 0.98f;
        this.y_speed *= 0.98f;
    }
}

if (Input.GetMouseButtonDown(0)){A} マウスボタン(左クリック)を押した瞬間にAの処理を行う
if (Input.GetMouseButtonUp(0)){A} マウスボタン(左クリック)を離した瞬間にAの処理を行う
transform.Translate(A, B, C); アタッチされているゲームオブジェクトの位置をX軸にA,Y軸にB,Z軸にCの値だけ移動

スクリプトの説明が知りたい方はそのまま下にいってくださいませ。

変数宣言

    // 変数宣言
    float x_speed = 0;
    float y_speed = 0;
    Vector2 startPos;

変数宣言してます。x軸に移動するときのスピードを【x_speed】、y軸に移動するときのスピードを【y_speed】にします。

メソッドを呼び出す

        // メソッドを呼び出す
        MoveSwipe();

長いのでUpdateメソッド内に書かずに、【MoveSwipe】メソッドとして書いています。メソッドは呼び出さなければ意味がないので、Updateメソッド内で呼び出しています。

左クリック時にそのときの座標を取得

        // マウスが左クリックされたとき
        if (Input.GetMouseButtonDown(0))
        {
            // マウスをクリックした座標
            this.startPos = Input.mousePosition;
        }

if (Input.GetMouseButtonDown(0)){A} マウスボタン(左クリック)を押した瞬間にAの処理を行う

左クリックした瞬間のマウスの位置を、【startPos】変数に入れています。

マウスボタンを離した瞬間

        else if (Input.GetMouseButtonUp(0))
        {
            // マウスを離した座標
            Vector2 endPos = Input.mousePosition;

            float x_swipeLength = endPos.x - this.startPos.x;
            float y_swipeLength = endPos.y - this.startPos.y;

            // スワイプの長さを速度に変換する
            this.x_speed = x_swipeLength / 250.0f;
            this.y_speed = y_swipeLength / 250.0f;
        }

先ほどは左クリックしたときの座標の情報を取得しました。ただここでは、左クリックが離されたときの座標を取得しています。

左クリックされたときのX軸の座標と左クリックが離されたときのX軸の座標との差を【x_swipeLength】に入れています。

左クリックされたときのY軸の座標と左クリックが離されたときのY軸の座標との差を【y_swipeLength】に入れています。

ただその差だと速度が早くなりすぎるので、250.0で割ることによって、速度をさげています。

そのx軸の速度が【x_spped】に、y軸の速度が【y_speed】になります。

オブジェクトを上下左右に動かす

        // オブジェクトを上下左右に動かす
        transform.Translate(this.x_speed, this.y_speed, 0);

transform.Translate(A, B, C); アタッチされているゲームオブジェクトの位置をX軸にA,Y軸にB,Z軸にCの値だけ移動

transform.Translate(A, B, C);を使うことで、オブジェクトの位置を移動させます。

X軸方向に【x_speed】,Y軸方向に【y_speed】だけ移動させています。

減速させる

        // 減速させる
        this.x_speed *= 0.98f;
        this.y_speed *= 0.98f;

一度スワイプさせて動かしたら、動いたままというのは困ります。

そこで【x_speed】と【y_speed】に0.98をかけることによって、徐々に減速させています。

どうでしょうか

動きましたか?!

スワイプで動かすことができるようになったら、自分も嬉しいデス( ・∇・)

スピードを変えたい場合は250.0で割る部分の値を変えてみてください。

まとめ

  • マウスボタンを押したときの座標、マウスボタンが離されたときの座標の差をうまくりようする!

途中に出てきたマウスボタンがクリックされたときの処理のはなしは、マウスが左・右クリックされたときの処理を設定できるメソッドでも触れてます。

あわせて読みたい
【Unity】マウスが左・右クリックされたときの処理を設定できるメソッド Unityでマウスを押したときの処理を設定したいなぁ という悩みを解決します。 ●処理を設定できるメソッド Input.GetMouseButtonDown マウスをクリックした瞬間にtrueを...

以上さぎのみや(@saginomiya8)でした。

ちょっと思った

こういうマウス使っているとスワイプしてる実感ないよね。ただそれだけ( ・∇・)

スワイプでUnityのオブジェクトを動かす

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメント一覧 (1件)

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次