#前書き
スマホゲームを作るにあたり必要不可欠なスマホ操作「フリック」
アセットでも存在するのですが、わかりにくかったりしたのでゴリゴリ書いたやつをまとめます。かなり初心者向けです。
#スクリプト解説
今回は単純化のため上下左右の4方向ですが、記事読めば8方向への拡張も難しくないです。
private Vector3 touchStartPos;
private Vector3 touchEndPos;
void Flick(){
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();
}
}
まずはここまで。
ここでは画面にタッチした位置と指を話した位置を取得しています。
前半のif文で"touchStartPos"にタッチした位置、"touchEndPos"に指を話した位置を入れています。
続いて、フリックされた方向を取得する"GetDirection()"についてです。
void GetDirection(){
float directionX = touchEndPos.x - touchStartPos.x;
float directionY = touchEndPos.y - touchStartPos.y;
string Direction;
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";
}
}
最初の2行でx軸方向の移動量とy軸方向の移動量を検出します。
その次からのif文がフリックの方向を判定しています。
1.x,yのどちらの移動量が多いか
→上下のフリックor左右のフリックの判定
2.移動量の正負を判定
→上or下,右or左を判定
※どれにも当てはまらない場合はタッチと判定の順で判定しています。
それぞれの判定後にはString型の変数"Direction"にそれぞれの方向が入るようになっています。
最後にそれぞれの場合の処理を書いていきます。
switch (Direction){
case "up":
//上フリックされた時の処理
break;
case "down":
//下フリックされた時の処理
break;
case "right":
//右フリックされた時の処理
break;
case "left":
//左フリックされた時の処理
break;
case "touch":
//タッチされた時の処理
break;
}
最後は"Direction"を用いたswitch文で処理します。
#最後に
今回はフリックについて扱いました。
応用も利くように書いたつもりなので、よろしければ使ってやってください。