即使鼠标停止,如何使Input.GetAxis(“ Mouse X”)获得一个值?

时间:2019-05-14 15:13:02

标签: c# unity3d

我正在使用鼠标水平控制游戏对象。对象会根据鼠标位置向左或向右移动,但是一旦鼠标停止移动,对象也会停止移动。我想要的是,如果我将鼠标拖动到屏幕的右侧并停止移动鼠标,那么只要鼠标位于屏幕的右半部,我就希望对象向右移动,反之亦然。当前Input.GetAxis(“ Mouse X”);停止时返回0值。这是代码:

float horizontalInput = Input.GetAxis("Mouse X");

我已经尝试过使用此修复程序,但由于使用immousebuttondown将播放器向前移动,因此无法获得预期的结果。

if (Input.GetMouseButton(0) && (horizontalInput == 0f))
{
    if (Input.mousePosition.x < Screen.width / 2)
    {
        horizontalInput = -1f;  
    }
    else if (Input.mousePosition.x > Screen.width / 2)
    {
        horizontalInput = 1f;
    }
}

还有其他方法可以实现吗?非常感谢您的宝贵时间!

我通过调整上述条件来解决了这个问题!

if (Input.GetMouseButton(0))
{
    if (Input.mousePosition.x < Screen.width / 2 && (horizontalInput < 0f))
    {
        horizontalInput = -1f;
    }
    if (Input.mousePosition.x > Screen.width / 2 && (horizontalInput > 0f))
    {
        horizontalInput = 1f;
    }             
}

1 个答案:

答案 0 :(得分:1)

只需检查不等于0的horizo​​ntalInput并每次存储最后一个位置(每次都覆盖即可)。 当它为0时,检查最后存储的位置,如果它在右侧,则继续移动对象,直到horizo​​ntalInput为0或到达屏幕边缘为止。 当然,在Update中,您甚至不需要循环一会儿,只需要检查horizo​​ntalInput是否为0或不为0。

类似这样的东西:

float horizontalInput = Input.GetAxis("Mouse X");
float lastPos = 0f;
if(horizontalInput  != 0){
  //move object with the mouse the code you currently use
  lastPos = Input.mousePosition.x;
}else if(horizontalInput == 0 && !EndOfScreen(currentObjectPos.x) && RighLeftScreen(lastPos)){
  Move();
}

当然这只是伪代码。您将需要编写一个函数来了解EndOfScreen是否在屏幕的右侧,您将需要知道您是在屏幕的右侧还是左侧(RighLeftScreen方法),最后您需要将对象Left或Right移至末尾。屏幕上的。

这只是基本想法。