2017-07-17 26 views
0

オブジェクトをx軸方向にスワイプ方向に動かそうとしています。ユーザーがスワイプするほど遠くに移動する必要があります(Ketchappのラッシュヒーローによく似ています)。 ゲームオブジェクトをx軸に沿ってスワイプに従って動かします。

は、ここでのアップデートで、これまでに私のコードです:

if (Input.touchCount > 0) 
     { 
      if (Input.GetTouch (0).phase == TouchPhase.Began) // Get initial Position 
      { 
       playerPos = transform.position; 
       //playerPos = Camera.main.ScreenToWorldPoint (playerPos); 
       touchPos = Input.GetTouch (0).position; 
       touchPos = Camera.main.ScreenToWorldPoint (touchPos); 
       distance = 0f; 

      } 
      else if (Input.GetTouch (0).phase == TouchPhase.Moved) 
      { 
       Vector3 pos = Input.GetTouch (0).position; 
       pos = Camera.main.ScreenToWorldPoint (pos); 
       distance = pos.x - touchPos.x; 
       transform.position = new Vector3 (transform.position.x + distance, transform.position.y, transform.position.z); 

      } 

     } 

これが正常に動作しないと私は団結で新人です。どんな助けもありがとう。

+0

現時点で何が間違っているのか詳しく教えてもらえますか? – ryeMoss

+0

ゲームオブジェクトをそれ以上に動かし、画面外に出る –

+0

距離を追加するのではなく、タッチがある場所に直接位置を更新するのはなぜですか? 'transform.position = new Vector3(pos.x、transform.position.y、transform.position.z); ' – ryeMoss

答えて

0

ここで問題となるのは、TouchPhase.Movedが2回以上(ジェスチャーが終了するまでフレームごとに)発生することです。しかし、あなたのコードはそれが一度だけ呼び出されることを前提としています。

ここには2つのオプションがあります。

  • オプション1:開始点をリセット

あなたTouchPhase.Movedブロックの最後の行としてtouchPos = Input.GetTouch (0).position;を追加します。これは効果的に「この距離はすでに処理されており、次のフレームは新しい動きとしてその動きを処理し、これはどこから始めるのか」を示します。

  • オプション2:使用して、絶対オフセット

変更transform.position = new Vector3 (distance, transform.position.y, transform.position.z);にごTouchPhase.Movedブロックの最後の行。これは、すべての移動が元の開始点からのオフセットとして扱われ、それに応じてX値を設定するように、すべてのフレームを扱います。しかし、これはオブジェクトが0から始まり、常にX軸に沿って0から始まることを前提としています。

ユースケースに応じて、ある方法を他の方法よりも優先させることができます。

関連する問題