モズク食べる

雑食雑記

Unityでフリックした方向へ画像を動かしたい

Unityでフリックした方向へ画像を動かしたい

【目的】

Unityを使ってパズルゲームを作成しようとしています。 そこでまずは、 フリックした方向へ画像が動く部分を作成してみました。

 

【結果】

なんとかできました。が、方法が色々あって、結構混乱しました。

初心者的にはやりたい内容がそのまま書かれている記事が欲しい(あまえんな)

ちなみにアセットだとこれがいいみたい。

assetstore.unity.com

 

◆手順

【完成イメージ】

画面を上下左右にフリックすると、画像がフリックした方向へポンっと移動します。

 f:id:mozukuino:20190401001244g:plain

※今は画面のどこをフリックしてもOKになっています。

 これでは困るので次はこのGIFみたいに画像をフリックするようにしたいです。

 

C#スクリプト

先人様が書かれたコードをありがたく拝借しています。9割引用です。 ただそのままでは動かなかったので、動いたコードを貼っておきます。  

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

public class GameManager : MonoBehaviour
{

    public GameObject TileA;

    // Use this for initialization
    void Start()
    {
    }

    // Update is called once per frame

    private Vector3 touchStartPos;
    private Vector3 touchEndPos;

    void Update()
    {

        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            touchStartPos = new Vector3(Input.mousePosition.x,
                                        Input.mousePosition.y,
                                        Input.mousePosition.z);
        }

        if (Input.GetKeyUp(KeyCode.Mouse0))
        {
            touchEndPos = new Vector3(Input.mousePosition.x,
                                      Input.mousePosition.y,
                                      Input.mousePosition.z);
            GetDirection();
        }
    }

        void GetDirection()
        {
            float directionX = touchEndPos.x - touchStartPos.x;
            float directionY = touchEndPos.y - touchStartPos.y;
            string Direction = null;

            if (Mathf.Abs(directionY) < Mathf.Abs(directionX))
            {
                if (30 < directionX)
                {
                    //右向きにフリック
                    Direction = "right";
                }
                else if (-30 > directionX)
                {
                    //左向きにフリック
                    Direction = "left";
                }
            }
            else if (Mathf.Abs(directionX) < Mathf.Abs(directionY))
            {
                if (30 < directionY)
                {
                    //上向きにフリック
                    Direction = "up";
                }
                else if (-30 > directionY)
                {
                    //下向きのフリック
                    Direction = "down";
                }
            }
            else
            {
                //タッチを検出
                Direction = "touch";
            }
            switch (Direction)
            {
                case "up":
                    //上フリックされた時の処理
                    TileA.transform.position += new Vector3(0, 100, 0);
                    break;

                case "down":
                    //下フリックされた時の処理
                    TileA.transform.position += new Vector3(0, -100, 0);
                    break;

                case "right":
                    //右フリックされた時の処理
                    TileA.transform.position += new Vector3(100, 0, 0);
                    break;

                case "left":
                    //左フリックされた時の処理
                    TileA.transform.position += new Vector3(-100, 0, 0);
                    break;

                case "touch":
                    //タッチされた時の処理
                    break;

            }
        }
    }

動いたので、これでいいのだと思うのですが Update()に一部を入れるなんて書いてないのでマズイことをしているのかも…。 不安。

◆参考にさせていただいたサイト。先人に感謝

qiita.com

utage.headwaters.co.jp