お世話になります。
・実現したいこと:
スマホで、左手でスワイプ(スクリーン画面を指でなぞること)したら、その指の動きに追従してキャラクター(以降Player1とする)が左手指に隠れないように右側に描画されるようにしたいです(タップしたらその位置に一瞬で移動(ワープ)されるのではなく)。
現在、上記の「実現したい動作の参考画像」のような移動はできるのですが、
下記「なくしたい動作の参考画像」のように、Player1がタップした位置に一瞬で移動する処理も入っており、これをなくして、上記の「実現したい動作の参考画像」のような移動処理のみにしたいです。
そのために以下のロジックで実装できないか試してみました。
①Player1のスタート位置を取得
スワイプした(スタート位置から一定の距離以上離れた)
②スワイプした位置を取得
①と②を比較して、スワイプしたとわかる距離であれば、Player1の描画位置を②へ変える。
作成したソースコード:
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Common; 5using System; 6 7/// <summary> 8/// Player1を操作するクラス 9/// 主に移動処理を書いている。 10/// </summary> 11public class Player1Controller : MonoBehaviour 12{ 13 // Player1のバトル開始座標 14 Vector3 player1_startPosition = new Vector3(-410.0f, -92.0f, 0.0f); 15 16 // タッチパネルをタップした位置を取得 17 Touch touch; 18 Vector3 touchPosition; 19 20 // Player1を1マス分前へ表示 21 Vector3 oneSquareForward = new Vector3(60.0f, 0.0f); 22 23 // Use this for initialization 24 void Start() 25 { 26 // このtransform自身のlocalPositionを初期化 27 this.transform.localPosition = player1_startPosition; 28 } 29 30 // Update is called once per frame 31 void Update() 32 { 33 if (Input.touchCount > 0) 34 { 35 // タッチパネルをタップした位置を取得 36 touch = Input.GetTouch(0); 37 touchPosition = Camera.main.ScreenToWorldPoint(touch.position); 38 39 touchPosition.z = 0.0f; 40 41 //スタート位置からスワイプ(タップしてワープせずにキャラクターが移動する 42 // 場所の後ろを指でなぞる)してキャラクターを移動したい 43 44 // ①Player1のスタート位置を取得 45 46 // スワイプした(スタート位置から一定の距離以上離れた) 47 48 // ②スワイプした位置を取得 49 50 // ①と②を比較して、スワイプしたとわかる距離であれば、 51 // Player1の描画位置を②へ変える。 52 53 // player1_startPositionはローカル座標のため、touchPositionをローカル座標に変換 54 float distanceAfterSwiping = Vector3.Distance(player1_startPosition, transform.InverseTransformPoint(touchPosition)); 55 56 // distanceAfterSwipingの値確認 57 Debug.Log(distanceAfterSwiping); 58 59 // Player1移動処理。 60 // distanceAfterSwiping < スワイプできる値 61 // 上記の処理を下記に実装しようとしたが、上手くいかない 62 if (touchPosition.y < BattleArea.myUpperSide && 63 BattleArea.myLowerSide < touchPosition.y && 64 touchPosition.x + oneSquareForward.x < BattleArea.myRightSide && 65 BattleArea.myLeftSide < touchPosition.x + oneSquareForward.x && 66 // distanceAfterSwipingをどの数字より小さくすればよいかわからない 67 distanceAfterSwiping < 0.2f) 68 { 69 this.transform.position = 70 touchPosition + oneSquareForward; 71 } 72 }
参考画像:Player1スタート位置(青エリア中央)
から青エリア右上隅へスワイプしたときのdistanceAfterSwipingの値:
distanceAfterSwipingの値を設定が上手くいかないのか、
それとも他が間違っているのか分かりませんでした。
アドバイスをお願いします。
回答1件
あなたの回答
tips
プレビュー