1

以下のコードは、GUI ボタン​​ OnClick の下で実行されるバックスペース ボタン機能を実装するために使用します。

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

正常に機能し、ボタンを 1 回クリックして入力テキストを 1 つずつ削除します。問題は、ユーザーがGUIボタンを連続して押すと、この関数を連続して実行したいということですキーボードのバックスペースボタンと同じですが、残念ながらこれはonClickが1回しか機能しないため、1回しか機能しません。目的のコードを実行するために、GUI の連続タッチを検出するために利用できるイベントまたはトリックはありますか?

4

2 に答える 2

2

選択可能なイベント システムを調べることができます。OnPonterDown と OnPointerUp を実装して、最初の設定でトリガーを設定し、2 番目の設定でそれを停止することができます。

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 に答える