1

下面的代码用于实现在GUI 按钮 OnClick 下运行的退格按钮功能。

 public void BackSpace(InputField userField) {
        string textEnter = userField.text;
        string tempString = textEnter.Substring(0, textEnter.Length - 1);
        userField.text = tempString;
    }

它工作正常,一次单击一个按钮即可删除输入文本。问题是我想在用户连续按下 GUI 按钮时连续运行此功能,就像您的键盘退格按钮一样,但遗憾的是,它只工作一次,因为 onClick 只工作一次。是否有任何事件或技巧可用于检测 GUI 上的连续触摸以运行我想要的代码?

4

2 回答 2

2

您可能需要查看 Selectable 事件系统。您可以实现 OnPonterDown 和 OnPointerUp 以便第一个设置触发,第二个停止它:

using UnityEngine.EventSystems;
public class Test : MonoBehaviour, IPointerDownHandler, IPointerUpHandler {
    [SerializeField]private InputField userField;
    #region IPointerUpHandler implementation
    private bool running =false;
    public void OnPointerUp (PointerEventData eventData)
    {
        running = false;
        if(timer < holdTime){ Tap(); }
        timer = 0.0f;
    }

    #endregion

    #region IPointerDownHandler implementation

    public void OnPointerDown (PointerEventData eventData)
    {
        running = true;
    }

    #endregion
    float timer = 0.0f;
    float holdTime = 0.25f;
    // Update is called once per frame
    void FixedUpdate () 
    {
        if(running){ 
           timer += Time.deltaTime;
           if(timer > holdTime)
                BackSpace();}
    }
    private void BackSpace() {
        string textEnter = userField.text;
        string tempString = textEnter.Substring(0, textEnter.Length - 1);
        userField.text = tempString;
    }
}

固定更新使其在不同设备上保持一致。您可以设置自己的更新系统来控制频率。

于 2016-03-29T05:29:44.333 回答
1

只是为了节省任何人的打字时间,这正是您的操作方式:

将此脚本放在按钮上

实际上,您将有一些其他脚本 ( SomeScript),其中有一个切换。

复制和粘贴!

using UnityEngine;
using UnityEngine.EventSystems;

public class HoldableButton: MonoBehaviour, IPointerDownHandler, IPointerUpHandler {

    bool _down;
    public SomeScript someScript;

    public void OnPointerDown(PointerEventData eventData) {
        _down = true;
    }

    public void OnPointerUp(PointerEventData eventData) {
        _down = false;
    }

    void Update() {

        someScript.yourToggle = _down;
    }
}
于 2019-04-10T14:14:57.060 回答