61 lines
1.5 KiB
C#
61 lines
1.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class SpriteButton
|
|
{
|
|
private GameObject _self;
|
|
private bool _isHold;
|
|
private bool _isButtonActive;
|
|
|
|
public event Action OnButtonDown;
|
|
public event Action OnButtonUp;
|
|
public event Action OnButtonHold;
|
|
|
|
public SpriteButton(GameObject gameObject)
|
|
{
|
|
_self = gameObject;
|
|
_isButtonActive = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查按钮
|
|
/// </summary>
|
|
/// <param name="self"></param>
|
|
public void CheckButtonClick()
|
|
{
|
|
if (!_isButtonActive)
|
|
{
|
|
_isHold = false;
|
|
return;
|
|
}
|
|
|
|
// 发射射线
|
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
|
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
|
|
|
|
// 检查射线是否与当前按钮接触
|
|
if (Input.GetMouseButton(0) && hit.collider && hit.collider.gameObject == _self)
|
|
{
|
|
// 按下
|
|
if (!_isHold)
|
|
{
|
|
OnButtonDown?.Invoke();
|
|
}
|
|
OnButtonHold?.Invoke();
|
|
|
|
_isHold = true;
|
|
}
|
|
else
|
|
{
|
|
if (_isHold)
|
|
{
|
|
OnButtonUp?.Invoke();
|
|
}
|
|
_isHold = false;
|
|
}
|
|
}
|
|
}
|
|
}
|