LemonteaのUnity部屋

LemonteaのUnity部屋

UnityとかC#のおはなしです~

初めてのスクリプト(6) GetAxis(Mouse X)でフリックorドラッグ

youtu.be


こんにちは。レモンティーです。

今回は、久々のスクリプト系です。
Input.GetAxis("Mouse X")を使って、マウスの動きを取得します。

フリックやドラッグといえばInput.MousePositionを使うことが多いですが、
その場合はスクリーン座標をワールド座標に変換しないといけません。

その点Mouse X,Mouse Yなら、そのまま使えるので
ひょっとするととっつきやすいかもしれません。

今回はその辺の検証もかねています。



使い方はInput.GetAxis("Vertical")とかと全く同じです。

Input.GetAxis("Mouse X")

これで、X方向のマウスの移動がとれます。

注意すべきは、

そのままだと、マウスをクリックしていなくても判定されること

MouseとX,Yの間に半角スペースが一ついること

くらいです。

動画のはこんなスクリプトです。

void Update () {
        if (Input.anyKey)
        {
            var x = Input.GetAxis("Mouse X");
            var y = Input.GetAxis("Mouse Y");
            var Direction = new Vector3(x, y, 0);
            transform.position += Speed * Direction;
        }
    }

動画のようにどこをタップしてもドラッグする操作ならこれで十分そうですね。

(ちなみに”タップした物体を”ドラッグする方法は最後にリンク張っておきました)



フリックにするなら…

    public float Speed;
    Vector3 Direction;
	void Update () {
        if (Input.GetMouseButton(0))
        {
            var x = Input.GetAxis("Mouse X");
            var y = Input.GetAxis("Mouse Y");
            Direction = new Vector3(x, y, 0);
        }

        if (Input.GetMouseButtonUp(0))
        {
            transform.position += Speed * Direction;
        }
    }

これなら一応フリックになります

しかし、ちょっとコツがいるという糞仕様になります…
(なぞった後、指を離すのが遅いと動かない)


それだったら、素直にInput.mousePositionを使って

public float Speed;
    Vector3 Direction,TapPosSc,TapPosWo;
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            TapPosSc = Input.mousePosition;
            TapPosSc.z = 10;
            TapPosWo = Camera.main.ScreenToWorldPoint(TapPosSc);
        }

        if (Input.GetMouseButtonUp(0))
        {
            TapPosSc = Input.mousePosition;
            TapPosSc.z = 10;
            Direction = Camera.main.ScreenToWorldPoint(TapPosSc);
            Direction -= TapPosWo;
            transform.position += Speed * Direction;
        }
    }

みたいにしたほうがいいかもしれません


これで、今回はおしまいです。



関連
①オブジェクトのタップ判定
②簡単ドラッグ        (②は①の続き)

sawalemounity.hatenablog.com

sawalemounity.hatenablog.com


Next

sawalemounity.hatenablog.com


前回
sawalemounity.hatenablog.com