You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UniRx中实现点击事件首触无等待、后续节流1秒执行?

解决方案

要实现「首次点击立即响应,后续点击需稳定1秒后触发」的效果,你需要把事件流拆分为首次触发和后续触发两个分支分别处理,再合并结果。直接对整个流加Throttle会导致第一次点击也被延迟,这是当前代码达不到预期的核心原因。

以下是修正后的代码:

GameObject button;

button.onClick
      .AsObservable()
      // 拆分事件流:第一个元素直接发射,剩余元素应用节流
      .Publish(o => o.Take(1).Merge(o.Skip(1).Throttle(TimeSpan.FromMilliseconds(1000))))
      .Subscribe(() => 
      {
          // 这里写你的点击响应逻辑
      });

代码说明

  • Publish操作符用于共享原始事件流,避免多次订阅onClick导致的重复监听问题
  • o.Take(1):取第一次点击事件,直接发射,实现「立即响应」
  • o.Skip(1).Throttle(TimeSpan.FromMilliseconds(1000)):跳过第一次事件,对后续所有点击应用1秒节流——只有当1秒内没有新的点击时,才会发射最后一次点击的事件
  • Merge:将两个分支的事件流合并,最终订阅的就是符合需求的完整流

另外注意你原代码里的拼写错误:FromMillseconds应该改为FromMilliseconds,否则会编译报错。

内容的提问来源于stack exchange,提问作者harutaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:45:40