从unity2d中的按钮获取连续输入

时间:2015-12-23 16:34:35

标签: android button input unity3d 2d

按钮的GetKey相当于什么。在我的安卓游戏中,当用户按下并按住按钮时,我希望玩家向右移动但是当我按下按钮时它只移动一次。但是当我从具有GetKey功能的键盘输入时,它会一直移动直到我停止持有按钮。我想使用像GetKey这样的按钮。我试图将一个事件触发器指针向下组件添加到我的按钮中,但它不起作用。我该怎么办?enter image description here

public void moveRight(){
    rigidbody2D.velocity = new Vector2(moveSpeed,rigidbody2D.velocity.y);
}

void Update () {

    if(Input.GetKeyDown (KeyCode.Space)){
        rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, jumpHigh);
    }
    if (Input.GetKey (KeyCode.A)) {
        rigidbody2D.velocity = new Vector2(-moveSpeed,rigidbody2D.velocity.y);
    }
    if (Input.GetKey (KeyCode.D)) {
        rigidbody2D.velocity = new Vector2(moveSpeed,rigidbody2D.velocity.y);
    }

}

他们完全相同,但我不明白为什么它不能继续工作。 更新方法是关键,我知道这一点,但我不知道如何获取有关更新方法中按下按钮的信息。帮助。

1 个答案:

答案 0 :(得分:1)

嗯,我们在这里有Unity3D API的两个不同部分。 让我们把它分成几部分:

Input.GetKey

如API docs中所述,Input.GetKey只检查某个键是否

  

当用户按下由name标识的键时,返回true。想想汽车火灾。

如果你每帧检查一次,(每帧执行Update())你会重新检查是否按下按钮,如果是,则继续速度更改。

EventTrigger

EventTriggers有点不同。它们实际上绑定了一个delegate(确切地说是UnityAction)并传递给它们,并在给定的EventTriggerType触发时将其作为回调触发。因此,如果您使用OnPointerDown()moveRight()绑定,则当指针在GameObject上方向下时,它将会触发。如果按下按钮,它将不会再次触发,因为实际的指针停止事件已经发生,并且已经触发了传递给它的相应触发器。指针现在实际上并没有下降。它很紧迫。

这一切都归结为这样一个事实:如果按下按钮,则一个部分检查每一帧,而另一个部分在按下按钮时发出