如何在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
相关产品推荐
相关产品推荐

