画面

2016-12-26 7 views
0

の異なるサイズのための境界としてmathf.clamp使用私は現在、それらの間のギャップで互いに隣接して二つの長キューブで「ブロック」という名前のゲームオブジェクトを持っています。ユーザーが画面にタッチして左または右にドラッグすると、ブロックもその方向に移動します。今私は彼らが左または右の方向に一定量に行くことができるように境界を設定しようとしています。それは例えばiPhoneアプリなど異なるスクリーンのため画面

同じであるので、しかし、どのように私はこれをコーディングすることができ、私が現在使用しているコードは、ブロックがお互いにそこにする必要があるギャップを取り除く重複します。どのように私はこれを修正しようとします。以下のコードは次のとおりです。画面サイズの問題については

public float speed = 0.0F; 
void Update() { 
    if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { 
     // Get movement of the finger since last frame 
     Vector3 touchDeltaPosition = Input.GetTouch(0).deltaPosition; 

     // Move object across XY plane 
     transform.Translate(touchDeltaPosition.x * speed, 0, 0); 

     Vector3 boundaryVector = transform.position; 
     boundaryVector.x = Mathf.Clamp (boundaryVector.x, -1f, 1f); 
     transform.position = boundaryVector; 
    } 
} 

blocks in unity

答えて

1

私はuが異なる解像度が、それはanchorプロパティを使用してセットに応じてバックグラウンドでいくつかのイメージのUIを入れてお勧めします。

画面サイズに幅の比0.5、設定UIのスケールに...これらすべてのみInspectorで高さを確認します。 Transformから左と右の境界値を取得し、次のようにblock gameobjスクリプトでそれを使用します。

//windows specific code 

      float x=Input.GetAxis ("Horizontal"); 
      if (x == 0) { 
       Stop(); 
      } else if (x > 0) { 
       MoveRight(); 
      } else if (x < 0) { 
       MoveLeft(); 
      } 
      pos = transform.position;  //left     //right 
      pos.x=Mathf.Clamp (pos.x, "your boundry min to", "Your boundry max"); 
      transform.position = pos; 

がオーバーラップ問題のためにuはブロック.Make互いの子に親/子プロパティを利用することができます。 uは右のブロックにも左に移動し、彼らは重複しません....

+0

私はあなたが求めているように私は自分のブロックゲームオブジェクトイムで上記のコードを貼り付けるとき、しかしなって次行った左に移動した場合、この方法を示す.inエラーCS0103:名前 'pos 'は現在のコンテキストに存在しません。これは、 "ストップ"、 "ムーバイト"、 "ムーブレフト"、 "ポジ"などです。これらのエラーがなぜ発生しているのか、そしてどのようにしてこの問題を解決できるのか説明できますか?ありがとう – U53R

+1

最初にuは、Googleからの統一のC#..と基本を学ぶ。この場合、変数 'pos'の宣言がないため、これらのエラーが発生しました。クラス内で宣言してください – utkdub