检测 GUI 按钮上的连续触摸
Detect continous touch on GUI button
下面的代码用于实现退格按钮功能,运行在 GUI 按钮 OnClick 下。
public void BackSpace(InputField userField) {
string textEnter = userField.text;
string tempString = textEnter.Substring(0, textEnter.Length - 1);
userField.text = tempString;
}
它工作正常并一次删除一个输入文本,只需单击一个按钮。问题是我想 运行 当用户 连续按下 GUI 按钮 时,它会持续运行.是否有任何事件或技巧可用于检测 GUI 上的连续触摸以便 运行 我想要的代码?
您可能想查看 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;
}
}
固定更新使其在不同设备上保持一致。您可以设置自己的更新系统来控制频率。
为了节省任何人的打字时间,下面是您的具体操作方式:
将此脚本放在按钮上
您实际上会有一些其他脚本 (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;
}
}
下面的代码用于实现退格按钮功能,运行在 GUI 按钮 OnClick 下。
public void BackSpace(InputField userField) {
string textEnter = userField.text;
string tempString = textEnter.Substring(0, textEnter.Length - 1);
userField.text = tempString;
}
它工作正常并一次删除一个输入文本,只需单击一个按钮。问题是我想 运行 当用户 连续按下 GUI 按钮 时,它会持续运行.是否有任何事件或技巧可用于检测 GUI 上的连续触摸以便 运行 我想要的代码?
您可能想查看 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;
}
}
固定更新使其在不同设备上保持一致。您可以设置自己的更新系统来控制频率。
为了节省任何人的打字时间,下面是您的具体操作方式:
将此脚本放在按钮上
您实际上会有一些其他脚本 (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;
}
}