2017-07-17 45 views
0

我試圖在保持屏幕內部的同時沿着x軸和滑動方向移動對象。它應該像用戶滑動一樣移動距離(就像Ketchapp的英雄一樣)。根據在x軸上的滑動移動gameobject統一

這裏是我到目前爲止的代碼中更新:

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發生多次(手勢期間的每個幀直到結束)。但是你的代碼假定它只被調用一次。

您有兩種選擇。

  • 選項1:重置起點

添加touchPos = Input.GetTouch (0).position;爲您TouchPhase.Moved塊的最後一行。這將有效地表明「這個距離已經被處理,下一幀將這一舉措視爲一個新舉措,這是從哪裏開始的。」

  • 選項2:使用絕對偏移

更改您的TouchPhase.Moved塊的最後一行transform.position = new Vector3 (distance, transform.position.y, transform.position.z);。這將對待每一幀,就好像每個移動都被視爲與原始起點的偏移並相應地設置X值。但是,這假設對象從0開始並始終沿着X軸從0開始。

根據您的使用情況,您可能更喜歡一種方法。