在 Unity 3D 中添加相机拖动
Adding camera drag in Unity 3D
我正在编写一个 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;
}
你看,主要问题是 world-space 中相机上两点之间的增量非常小,具体取决于您与主题棋盘的距离,但通过乘以例如,(mousePosition.origin - lastMousePosition.origin)
的乘积实际上会导致指数速度增加。我不太确定,但有人可以帮我弄清楚如何才能真正提高上述代码发生拖动的速度吗?我在这里有点难过。
我用更简单的逻辑解决了这个问题:
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;
}
}
我正在编写一个 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;
}
你看,主要问题是 world-space 中相机上两点之间的增量非常小,具体取决于您与主题棋盘的距离,但通过乘以例如,(mousePosition.origin - lastMousePosition.origin)
的乘积实际上会导致指数速度增加。我不太确定,但有人可以帮我弄清楚如何才能真正提高上述代码发生拖动的速度吗?我在这里有点难过。
我用更简单的逻辑解决了这个问题:
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;
}
}