UGUI - EventTrigger

A操作会导致B事,这就是个 Entry(EventTrigger.Entry),我希望C对象上会发生这种事,只需要把这个Entry与C对象进行绑定(triggers.add(Entry))即可

鼠标连点五次

private void ClickTest() {
    // multipleClick代表发生点击操作后会发生MultiClick这件事,这是个事件
    EventTrigger.Entry multipleClick = new EventTrigger.Entry();
    multipleClick.eventID = EventTriggerType.PointerClick;
    multipleClick.callback.AddListener((data) => MultiClick(data));
    
    // 希望在这个increaseButton对象上发生事件
    EventTrigger eventTrigger = increaseButton.GetComponent();
    if (eventTrigger == null) {
        increaseButton.AddComponent();
        eventTrigger = increaseButton.GetComponent();
    }
    eventTrigger.triggers.Add(multipleClick);
}

/**
 * 连点,思路是每次点击时,计算当前和上一次点击的时间差,只要没超出阈值就算连续点击
 */
private int clickCount; // 连点次数
private int clickCountThreshold = 5;
private float lastClickTime; // 上次点击时间
private float threshold = 0.5F; // 时间间隔(多长时间之内不清空连点次数)
private void MultiClick(BaseEventData baseEventData) {
    print("发生点击");
    float time = Time.time - lastClickTime;
    // 连点次数,时间范围内就累加,超出时间范围就重置为1次
    if (time < threshold) {
        clickCount++;
        if (clickCount >= clickCountThreshold) {
            print("连点五次");
            clickCount = 0;
        }
    } else {
        clickCount = 1;
    }

    lastClickTime = Time.time;
}

鼠标长按五秒

private void PressTest() {
    // 什么操作会发生什么事情 -> 事件
    EventTrigger.Entry pressEntry = new EventTrigger.Entry();
    pressEntry.eventID = EventTriggerType.PointerDown;
    pressEntry.callback.AddListener(Press);
    EventTrigger.Entry upEntry = new EventTrigger.Entry();
    upEntry.eventID = EventTriggerType.PointerUp;
    upEntry.callback.AddListener(Up);
    
    EventTrigger eventTrigger = increaseButton.GetComponent();
    if (eventTrigger == null) {
        increaseButton.AddComponent();
        eventTrigger = increaseButton.GetComponent();
    }
    // 某个对象(这里是按钮)要发生这个事件,即将对象与事件进行绑定
    eventTrigger.triggers.Add(pressEntry);
    eventTrigger.triggers.Add(upEntry);
}

/**
 * 长按
 */
private float seconds = 5F; // 按压时长阈值
private bool isPress = false; // 是否按压
private float pressTime = 0F; // 按压时间
private bool singleTrigger = false; // 只触发一次
private void Press(BaseEventData baseEventData) {
    isPress = true;
    singleTrigger = true;
}
private void Up(BaseEventData baseEventData) {
    isPress = false;
    singleTrigger = false;
    pressTime = 0F;
}
private void Update() {
    if (isPress && singleTrigger) {
        pressTime += Time.deltaTime;
        if (pressTime >= seconds) {
            print("长按五秒");
            singleTrigger = false; // 避免反复触发
        }
    }
}

你可能感兴趣的:(Unity,unity)