Files
MinFt/Client/Assets/Scripts/UIExtend/UIButton.cs
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

79 lines
2.6 KiB
C#

using System;
using UniRx;
using UniRx.Triggers;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIButton : Button
{
[SerializeField]private float _holdThresh = 0.5f;
private ButtonClickedEvent m_OnDown = new ButtonClickedEvent();
private ButtonClickedEvent m_OnUp = new ButtonClickedEvent();
private ButtonClickedEvent m_OnLongPress = new ButtonClickedEvent();
private ButtonClickedEvent m_OnShortClick = new ButtonClickedEvent();
private IDisposable clickStream, longPressStream;
private DateTimeOffset _lastDownTime, _lastUpTime;
//private CompositeDisposable _pressTimer;
//private float ci;
PointerEventData pointerEventData;
protected override void Start()
{
var pointerDownStream = this.OnPointerDownAsObservable().Timestamp();
var pointerUpStream = this.OnPointerUpAsObservable().Timestamp();
//Logic of long press: delayed.Timestamp - delayThreshold - lastButtonUpTime > 0
longPressStream = pointerDownStream
.SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(_holdThresh)))
.Timestamp()
.Where(_ => (_.Timestamp - _lastUpTime ).TotalSeconds > _holdThresh)
.Subscribe(_ => m_OnLongPress.Invoke())
.AddTo(this);
clickStream = pointerUpStream
.CombineLatest(pointerDownStream, (eUp, eDown) => eUp.Timestamp - eDown.Timestamp)
.Where(interval => interval.TotalSeconds > 0 && interval.TotalSeconds <= _holdThresh)
.Subscribe(_ => m_OnShortClick.Invoke())
.AddTo(this);
}
public ButtonClickedEvent onDown
{
get { return m_OnDown; }
set { m_OnDown = value; }
}
public ButtonClickedEvent onUp
{
get { return m_OnUp; }
set { m_OnUp = value; }
}
public ButtonClickedEvent onLongPress
{
get { return m_OnLongPress; }
set { m_OnLongPress = value; }
}
public new ButtonClickedEvent onClick
{
get { return m_OnShortClick; }
set { m_OnShortClick = value; }
}
public override void OnPointerDown(PointerEventData eventData)
{
base.OnPointerDown(eventData);
m_OnDown.Invoke();
pointerEventData = eventData;
_lastDownTime = DateTimeOffset.Now;
}
public override void OnPointerUp(PointerEventData eventData)
{
base.OnPointerUp(eventData);
m_OnUp.Invoke();
_lastUpTime = DateTimeOffset.Now;
}
public void Up()
{
OnPointerUp(pointerEventData);
}
public bool IsDowning => IsPressed();
}