2021年7月29日木曜日

#6 ピンチアウトピンチイン、スクロールとかの実装


画面を広くすると

ドラッグしてがめんずらしたり、

スクロールボタンで画面を拡大縮小したいしたくなります。


Unityでダブルクリックとかドラッグとか

なんか関数があるのかと思ったら特にないみたいなので

自分で作成


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

public class MouseController : MonoBehaviour
{
private float clickTime = 0;
private bool clickFlg = false;
private GameObject mainCamera;
private Vector3 dragStartPosision;
private float mouseDownTime = 0;

void Start()
{
mainCamera = Camera.main.gameObject;
}
void Update()
{
if (Input.GetMouseButtonDown(0) && !clickFlg)//マウスを押した時
{
mouseDownTime=0;//長押しチェック用カウント初期化
dragStartPosision = Input.mousePosition;//ドラッグチェック用スタート地点
}
if(Input.GetMouseButton(0))//マウス押している間
{
mouseDownTime += Time.deltaTime; //長押しチェック用カウントアップ
}
if (Input.GetMouseButtonUp(0))
{
if (clickFlg)//一度クリックし、時間ないにもう一度クリック
{
doubleClickAction();//ダブルクリック
clickFlg=false;//クリックフラグ解除
}
else
{//クリックしていない状態
clickTime=0;//ダブルクリックチェック用カウンタ初期化
clickFlg=true;//クリックチェックフラグ
if(Vector3.Distance(dragStartPosision, Input.mousePosition) > 1)
{//ドラッグチェック、スタート地点から移動しているか?
MovePoisition();//ドラッグ
clickFlg=false;//クリックフラグ解除
}
else if(mouseDownTime>0.4)
{//長押し時間超えているか?
longClickAction();//長押し
clickFlg=false;//クリックフラグ解除
}
}
}
if(clickFlg)//クリックしてチェック
{
clickTime += Time.deltaTime;//ダブルクリックチェック用カウンタUP
if(clickTime > 0.3)//カウンタリミット
{
singleClickAction();//シングルクリック
clickFlg=false;//クリックフラグ解除
}
}
//ホイルスクロールで拡大縮小
float scroll = 0f;
scroll = Input.mouseScrollDelta.y;
mainCamera.transform.Translate(0, 0, scroll);
}

private void MovePoisition()
{
Debug.Log("ドラッグ");
}
void longClickAction()
{
Debug.Log("長押し");
}
void singleClickAction()
{
Debug.Log("シングル");
}
void doubleClickAction()
{
Debug.Log("ダブル");
}

}


マウスボタンの判定は

押した時、押してる時、離した時

これを利用して

ダブルクリックは1回目クリックを離した時からタイマーを動かし、

短い時間で2回目のクリック(ボタン離れた時)が発生したらダブルクリック

クリックフラグをつけておいて、時間がきたら解除、解除される前にクリックが発生するかを確認。

シングルクリックはダブルクリックにならなかったらシングルなので

時間が来たら解除、のところに解除されるってことはシングルクリック!

この時間が来たらの時間を長くするとシングルクリックの反応が遅くて気持ち悪い


ドラッグは

ボタン押した時に、押した場所を記録

離したときに、その場所からずれていたらドラッグとする


長押しは

ボタン押した時にタイマー初期化

ボタン押している間、タイマーを増やす

離した時に、一定以上押していたら長押しとする。

ただ、ドラッグの時も長押し状態なので、ドラッグと異なりマウスが移動していないことをじょうけんに加える


おまけに

スクロールボタンでカメラのズームとかも実装

 

参考

https://qiita.com/Nakatomo/items/7a1491de39a94fa176b0

0 件のコメント: