2017-08-28 5 views
1

私はユニティを学ぶのを手伝って以​​来、私は3Dチェスゲームを書いています。マウスの中央ボタンを押したときにカメラのドラッグを実装しようとしています。次のコードは、これを行いますが、問題はその遅いということです。Unity 3Dでカメラのドラッグを追加する

bool wasDraggingCamera = false; 
Vector3 lastScreenMousePosition; 
Ray lastMousePosition; 

void Update() 
{ 
    UpdateDrag(); 
} 

void UpdateDrag() 
{ 
    var willDragCamera = wasDraggingCamera; 
    wasDraggingCamera = Input.GetMouseButton(2); 
    var mousePosition = Camera.main.ScreenPointToRay(Input.mousePosition); 
    if (willDragCamera && Input.mousePosition != lastScreenMousePosition) 
     transform.position = transform.position - (mousePosition.origin - lastMousePosition.origin); 
    lastScreenMousePosition = Input.mousePosition; 
    lastMousePosition = mousePosition; 
} 

あなたが見るが、主な問題は、ワールド空間内のカメラ上の2点間のデルタはあなたがどのくらいに応じて、非常に小さいことです対象となるチェス盤から、(mousePosition.origin - lastMousePosition.origin)の積を掛けて増幅すると、実際には指数関数的な速度上昇が起こります。私は確信していませんが、誰かが私が実際に上記のコードでドラッグが起こる速度をどのように高めることができるかを理解するのを助けることができますか?私はここで少し困っている。

+0

どのボードからあなたの距離のいくつかの線形係数でデルタを乗算については?デルタ乗算器が大きくなるほど、より多くのデルタ乗数が得られます。画面座標(https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html)に基づいてカメラの位置を移動するだけで、ワールド座標ではなく移動するだけです。 – ryeMoss

答えて

0

私はいくつかの非常にシンプルなロジックでそれを考え出し:

Vector3 lastDragPosition; 

void Update() 
{ 
    UpdateDrag(); 
} 

void UpdateDrag() 
{ 
    if (Input.GetMouseButtonDown(2)) 
     lastDragPosition = Input.mousePosition; 
    if (Input.GetMouseButton(2)) 
    { 
     var delta = lastDragPosition - Input.mousePosition; 
     transform.Translate(delta * Time.deltaTime * 0.25f); 
     lastDragPosition = Input.mousePosition; 
    } 
} 
関連する問題