0

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

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

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;
}
4

1 に答える 1

0

マウスが最初に押されたときのマウスの位置の値との差を差し引いた値を介してドラッグされているため、マウスの位置を使用して x 軸と y 軸の値を変換することをお勧めします。

その要約は次のようになります。

  1. 2D ベクトルを previousPos というプライベート フィールドとして保存し (したがって、mousedown と mousemove の両方がアクセスできます)、その値をマウスの現在の位置の結果に設定します。
  2. マウス ドラッグ関数で、マウスの位置を再度取得し、その値を currentPos という 2D ベクトルに割り当て、それを previousPos から減算します。これにより、パドルの変換位置を設定する x 軸と y 軸の値が得られます。
  3. 次に、ドラッグ関数の最後にある previousPos を更新し、 currentPos の値をそれに割り当てて、次回は集約された変更ではなく新しい変更を与えるようにします。

*おそらく、マウスが押されたときに true に設定し、ドラッグの最後に false に設定するブール値が必要になるでしょう。ドラッグでそのブール値を使用して、最初にパドル位置を設定する必要があるかどうかを確認します (ブール値が true の場合にのみパドル位置を設定します) - Unity がドラッグしたマウスを発射するだけでこれを行うかどうかはわかりません。マウスがダウンしているかどうか。

コードの例:

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
}
于 2016-11-22T21:07:20.050 に答える