▼そのUnityの作業、依頼しませんか?
メソッド

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

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

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

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

 

こんな感じで動かせるようになります。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」メソッドを使います。右クリック・左クリックでもクリックされたときの処理を設定できます。...

以上さぎのみや(@saginomiya8)でした。SNSでシェアしてね( ・∇・) 明日からも一生無双でやったりましょう。

ちょっと思った

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

ABOUT ME
さぎのみや
さぎのみや
超書手。現在はUnityメディア「ユニシャー」の運営とゲーム開発がメインです。Unity、ライティング関係のお仕事お待ちしております。 >>詳しいプロフィール >>Amazonほしいものリスト
【Unity3D】新しいサンプルゲーム(チュートリアル)を作りました!!!
Unity有料サンプルゲーム

「Unityで3Dゲームを本格的に作っていきたい!」という人におすすめのチュートリアルとなっています。

画像のようなゲームの作り方を販売しています。色々と応用できるサンプルゲームとなっています。ぜひ、作ってみてください。

詳細
>>【Unity3Dサンプルゲーム】うちのポチが危ないところでフリスビーを要求する理由を教えてくれ

>>BOOTHでサンプルゲームを見る

【シェア・フォローであなたのスキルが上がる】

シェアフォローする

さぎのみやのモチベが上がる

コンテンツの質が上がる

あなたの能力も上がる

あなたの
Twitterでのシェア

pixivFANBOXのフォローであなたの能力が上がります。

>>さぎのみやのツイッター(@saginomiya8)
>>さぎのみやのpixivFANBOX

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


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