在Unity 3D中添加相机拖动

时间:2017-08-28 14:50:00

标签: c# unity3d camera drag

我正在写一个3D国际象棋游戏,因为它帮助我学习Unity。我正在尝试按下鼠标中键时实现相机拖动。以下代码执行此操作,但问题是它缓慢:

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

你知道,主要的问题是世界空间中摄像机上两点之间的差异非常小,这取决于你与主题棋盘的距离,但是通过乘以{{1}的乘积来放大它。例如,实际上会导致指数速度增加。我不太确定,但有人可以帮我弄清楚如何用上面的代码实际提高阻力发生的速度吗?我在这里有点难过。

1 个答案:

答案 0 :(得分: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;
    }
}