【问题标题】:Getting continuous input from a button in unity2d从unity2d中的按钮获取连续输入
【发布时间】:2015-12-24 04:50:33
【问题描述】:

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

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);
    }

}

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

【问题讨论】:

    标签: android button input unity3d 2d


    【解决方案1】:

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

    Input.GetKey

    ​​>

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

    当用户按住由名称标识的键时返回 true。想想自动开火。

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

    事件触发器

    EventTriggers 有点不同。他们实际上绑定了一个delegate(准确地说是UnityAction),并在给定的EventTriggerType 触发时触发它作为回调。因此,如果您使用moveRight() 绑定到OnPointerDown(),它将在指针下降到GameObject 时触发。如果您按住按钮,它不会再次触发,因为指针下降的实际事件已经发生并且它已经触发了您传递给它的适当触发器。指针实际上现在并没有下降。被压了

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

    【讨论】:

    • 好吧,这是有道理的。但是我如何检查 update() 函数中是否按下了某个按钮?
    • 这取决于您希望根据是否按下按钮执行任何操作的频率?如果您想每帧实际执行此操作,则通过Update() 执行此操作是一种方法。如果您不想在每帧但每一定时间(我将其视为 0.1 秒)执行此操作,您可以创建一个Coroutine,通过EventTriggeryield return new WaitForSeconds(0.1f) 上的StartCoroutine() 启动它它while (Key.IsPressed("YourKey")) {}。准确地说,在 Unity3D 中按下的某些键甚至没有 EventTrigger
    • 我可能没有说清楚,但是:你现在做的方式就是 Unity3D 打算让你做的方式。
    • 感谢您的努力。我将继续我的研究。您非常乐于助人,谢谢
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2021-08-03
    • 2020-02-17
    • 2013-09-18
    相关资源
    最近更新 更多