2016-11-22 38 views
0

Unityで2Dゲームを作成していて、パドルをドラッグするのに使用しているスクリプトをどのように改善できるかについて誰かが知りたいと思ったブレークアウト/アルカノイドスタイルのゲーム。私はオブジェクトをドラッグするもっと複雑な方法があることを知っていますが、これは私にとってはうまくいきますが、遭遇する唯一の問題は、私がモバイルデバイスでゲームをテストすると、ドラッグが100%シャープではなく、ドラッグを止めると、これほどわずかです。私はPlayストアからダウンロードした他のブレークアウトゲームをプレイしていて、ドラッグが非常に鮮明であるため、モバイルデバイスに問題はありません。Unity - マウス/タッチでRigidBody2D Gameオブジェクトをドラッグする最適な方法

以下のスクリプトはパドルに添付されています。

Vector3 dist; 
float posX; 
float posY; 

void OnMouseDown(){ 
    dist = Camera.main.WorldToScreenPoint(transform.position); 
    posX = Input.mousePosition.x - dist.x; 
    posY = Input.mousePosition.y - dist.y; 

} 

void OnMouseDrag(){ 
    Vector3 curPos = new Vector3(Input.mousePosition.x - posX, Input.mousePosition.y - posY, dist.z); 

    Vector3 worldPos = Camera.main.ScreenToWorldPoint(curPos); 

    transform.position = worldPos; 
} 
+0

あなたは 'Camera.main.ScreenToWorldPoint'を意味しないのですか? –

答えて

0

は、私は、それが最初に押していますように、マウスの位置の値が何であったかとの差し引き差異を経由してドラッグされていますように、マウスの位置を使用して、xとy軸の値の翻訳をやって助言します。

その概要は次のようになります。マウスの現在の結果に

  1. ストアpreviousPosというプライベートフィールドとして、2Dベクトル、(そう マウスダウンとのMouseMoveがアクセスそれ両方の缶)、それが価値だ設定ポジション。マウスドラッグ機能において
  2. 、再びマウスの位置を取得し、2次元ベクトルと呼ばcurrentPosに 値を割り当て、 からあなたのxおよびy軸の値を与えるpreviousPosは、 パドルの変換位置を設定することを引きますに。
  3. 次に、ドラッグ機能の最後でpreviousPosを更新し、 はcurrentPosの値を割り当てて、次回に が集約された変更ではなく新しい変更を与えるようにします。

あなたはおそらく、マウスがダウンしていると、ドラッグの終了時にfalseに設定したときにtrueに設定ブール値を持っていると思います*。最初の場所にパドルの位置を設定する必要があるかどうかを確認するには、そのブールをドラッグで使用します(ブール値が真の場合はパドルの位置のみを設定します)。 - マウスがドラッグされたときだけ、マウスがダウンしているかどうか。コード内

例:

private Vector2 _previousPos; 
private bool _isMouseDown; 

void OnMouseDown(){ 
    _isMouseDown = true; //because we're in the on mouse down function 
    _previousPos = Input.mousePosition; //get the current mouse position 
} 

void OnMouseDrag(){ 
    if(!_isMouseDown) 
     return; 

    Vector2 currentPos = Input.mousePosition; //get updated mouse pos 
    Vector2 paddlePos = currentPos - previousPos; //the delta change 

    transform.position = paddlePos; //new paddle position 

    _isMouseDown = false; //drag is complete, mouse btn is no longer down 
    _previousPos = currentPos; //reset previous pos for next mouse move 
} 
+0

私はあなたが何を意味するか理解できないので、私は精神的なブロックを持っているようですが、あなたの提案のためにこんにちは感謝。あなたはこれを実証するのに十分親切でしょうか? – Kaz

+0

確かです。更新された答え。 –

+0

非常にありがとう、カイル、私はこれを試してみます。 – Kaz

関連する問題