从unity2d中的按钮获取连续输入
Getting continuous input from a button in unity2d
什么是按钮的 GetKey 等价物。在我的 android 游戏中,当用户按住按钮时,我希望玩家向右移动,但是当我从具有 GetKey 功能的键盘获得输入时,当我按下 button.But 时它只移动一次,它移动直到我停止按住那个按钮。我想使用我的按钮,例如 GetKey.I 试图将事件触发指针向下组件添加到我的按钮中,但它不是 working.What 我应该怎么做?
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);
}
}
它们完全相同,但我不明白为什么它不能连续工作。
更新方法是关键,我知道这一点,但我不知道如何获取有关在更新 method.Stuck 帮助中按下按钮的信息。
嗯,这里有 Unity3D
API 的两个不同部分。
让我们把它分成几个部分:
Input.GetKey
如 API docs 所述,Input.GetKey 只是检查某个键是否被 按下:
Returns true while the user holds down the key identified by name. Think auto fire.
如果你每帧都检查它,(Update()
每帧执行)你重新检查按钮是否被按下,如果是,继续进行 velocity 改变。
事件触发器
EventTriggers 有点不同。他们实际上绑定了你传递给他们的 delegate
(准确地说是 UnityAction
),并在给定 EventTriggerType
触发时将其作为回调触发。因此,如果您使用 moveRight()
绑定到 OnPointerDown()
,它会在指针下降超过 GameObject
时触发。如果你按住按钮,它不会再次触发,因为指针下降的实际事件已经发生并且它已经触发了你传递给它的适当触发器。指针现在实际上并没有下降。它被按下了。
这一切都归结为这样一个事实,如果按钮 被按下 ,一个部分检查每一帧,而另一个部分 在按钮按下时触发 .
什么是按钮的 GetKey 等价物。在我的 android 游戏中,当用户按住按钮时,我希望玩家向右移动,但是当我从具有 GetKey 功能的键盘获得输入时,当我按下 button.But 时它只移动一次,它移动直到我停止按住那个按钮。我想使用我的按钮,例如 GetKey.I 试图将事件触发指针向下组件添加到我的按钮中,但它不是 working.What 我应该怎么做?
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);
}
}
它们完全相同,但我不明白为什么它不能连续工作。 更新方法是关键,我知道这一点,但我不知道如何获取有关在更新 method.Stuck 帮助中按下按钮的信息。
嗯,这里有 Unity3D
API 的两个不同部分。
让我们把它分成几个部分:
Input.GetKey
如 API docs 所述,Input.GetKey 只是检查某个键是否被 按下:
Returns true while the user holds down the key identified by name. Think auto fire.
如果你每帧都检查它,(Update()
每帧执行)你重新检查按钮是否被按下,如果是,继续进行 velocity 改变。
事件触发器
EventTriggers 有点不同。他们实际上绑定了你传递给他们的 delegate
(准确地说是 UnityAction
),并在给定 EventTriggerType
触发时将其作为回调触发。因此,如果您使用 moveRight()
绑定到 OnPointerDown()
,它会在指针下降超过 GameObject
时触发。如果你按住按钮,它不会再次触发,因为指针下降的实际事件已经发生并且它已经触发了你传递给它的适当触发器。指针现在实际上并没有下降。它被按下了。
这一切都归结为这样一个事实,如果按钮 被按下 ,一个部分检查每一帧,而另一个部分 在按钮按下时触发 .