| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
| using System; | 
|   | 
| /// <summary> | 
| /// 带有+-按钮控制数量显示和回调 | 
| /// </summary> | 
| public class CountControler : MonoBehaviour | 
| { | 
|     [SerializeField] Text countText; | 
|     [SerializeField] LongPressButton addBtn; | 
|     [SerializeField] LongPressButton decBtn; | 
|   | 
|     int count;  //当前数量 | 
|     int maxCount;   //最大数量 | 
|     string format; | 
|   | 
|     Action<int> OnChangeEvent; | 
|     Func<int, bool> CanAddEvent; | 
|     Func<int, bool> CanDecEvent; | 
|     void Start() | 
|     { | 
|         addBtn.AddListener(() => | 
|         { | 
|             if (CanAddEvent == null || !CanAddEvent(count)) | 
|             { | 
|                 return; | 
|             } | 
|             count++; | 
|             Refresh(); | 
|         }); | 
|         addBtn.onPress.AddListener(() => | 
|         { | 
|             if (CanAddEvent == null || !CanAddEvent(count)) | 
|             { | 
|                 return; | 
|             } | 
|             count++; | 
|             Refresh(); | 
|         }); | 
|         decBtn.AddListener(() => | 
|         { | 
|             if (CanDecEvent == null || !CanDecEvent(count)) | 
|             { | 
|                 return; | 
|             } | 
|             count--; | 
|             Refresh(); | 
|         }); | 
|         decBtn.onPress.AddListener(() => | 
|         { | 
|             if (CanDecEvent == null || !CanDecEvent(count)) | 
|             { | 
|                 return; | 
|             } | 
|             count--; | 
|             Refresh(); | 
|         }); | 
|   | 
|     } | 
|   | 
|     public void Init(Action<int> _OnChangeEvent, int _maxCount, int _count = 1, | 
|     Func<int, bool> _CanAddEvent = null, Func<int, bool> _CanDecEvent = null, string _format="{0}/{1}") | 
|     { | 
|         count = _count; | 
|         maxCount = _maxCount; | 
|         OnChangeEvent = _OnChangeEvent; | 
|         CanAddEvent = _CanAddEvent; | 
|         CanDecEvent = _CanDecEvent; | 
|         format = _format; | 
|   | 
|         Refresh(); | 
|   | 
|     } | 
|   | 
|     void Refresh() | 
|     { | 
|          | 
|         if (count >= maxCount) | 
|         { | 
|             count = maxCount; | 
|             addBtn.interactable = false; | 
|             addBtn.SetColorful(null, false); | 
|         } | 
|         else | 
|         { | 
|             addBtn.interactable = true; | 
|             addBtn.SetColorful(null, true); | 
|         } | 
|   | 
|         if (count <= 0) | 
|         { | 
|             count = 0; | 
|             decBtn.interactable = false; | 
|             decBtn.SetColorful(null, false); | 
|         } | 
|         else | 
|         { | 
|             decBtn.interactable = true; | 
|             decBtn.SetColorful(null, true); | 
|         } | 
|   | 
|         countText.text = string.Format(format, count, maxCount); | 
|         OnChangeEvent?.Invoke(count); | 
|     } | 
|   | 
| } |