2017-08-28 95 views
1

我正在写一个3D国际象棋游戏,因为它帮助我学习Unity。我正试图在鼠标中键被按下时实现相机拖动。下面的代码做到这一点,但问题是,它的速度慢:在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; 
} 

你看,主要问题是,相机在世界空间上的两个点之间的增量是非常小的取决于你有多远从主题国际象棋棋盘,但放大它乘以(mousePosition.origin - lastMousePosition.origin)的产品实际上会导致例如指数速度增加。我不太清楚,但有人可以帮我弄清楚,实际上我可以通过上面的代码来增加拖动发生的速度吗?我在这里有点难过。

+0

怎么样从板的距离的一些线性系数乘以增量?所以你离它越远,delta乘数就越大。或更好,但只是基于[屏幕坐标](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; 
    } 
}