我正在使用鼠标水平控制游戏对象。对象会根据鼠标位置向左或向右移动,但是一旦鼠标停止移动,对象也会停止移动。我想要的是,如果我将鼠标拖动到屏幕的右侧并停止移动鼠标,那么只要鼠标位于屏幕的右半部,我就希望对象向右移动,反之亦然。当前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;
}
}
答案 0 :(得分:1)
只需检查不等于0的horizontalInput并每次存储最后一个位置(每次都覆盖即可)。 当它为0时,检查最后存储的位置,如果它在右侧,则继续移动对象,直到horizontalInput为0或到达屏幕边缘为止。 当然,在Update中,您甚至不需要循环一会儿,只需要检查horizontalInput是否为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移至末尾。屏幕上的。
这只是基本想法。