52 lines
1.3 KiB
C#
52 lines
1.3 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class SingleInteractableButtonHandler : MonoBehaviour
|
|
{
|
|
[Tooltip("이 버튼이 한 번만 클릭되도록 제한할지 여부")]
|
|
[SerializeField] private bool enableOneTimeClick = true;
|
|
|
|
private Button _button;
|
|
|
|
private bool hasBeenClicked = false;
|
|
|
|
private void Awake()
|
|
{
|
|
// 버튼 컴포넌트 가져오기
|
|
_button = GetComponent<Button>();
|
|
|
|
if (_button != null && enableOneTimeClick)
|
|
{
|
|
// 기존 onClick 이벤트를 저장
|
|
Button.ButtonClickedEvent originalOnClick = _button.onClick;
|
|
|
|
_button.onClick = new Button.ButtonClickedEvent();
|
|
|
|
_button.onClick.AddListener(() =>
|
|
{
|
|
if (!hasBeenClicked)
|
|
{
|
|
hasBeenClicked = true;
|
|
|
|
for (int i = 0; i < originalOnClick.GetPersistentEventCount(); i++)
|
|
{
|
|
originalOnClick.Invoke();
|
|
}
|
|
|
|
// 버튼 비활성화
|
|
_button.interactable = false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
// 버튼 상태 리셋
|
|
public void ResetButton()
|
|
{
|
|
hasBeenClicked = false;
|
|
if (_button != null)
|
|
{
|
|
_button.interactable = true;
|
|
}
|
|
}
|
|
|
|
} |