69 lines
1.7 KiB
C#
69 lines
1.7 KiB
C#
|
using UnityEngine;
|
|||
|
using UnityEngine.Events;
|
|||
|
using UnityEngine.EventSystems;
|
|||
|
using UnityEngine.UI;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// View和Control功能分离的Toggle
|
|||
|
/// </summary>
|
|||
|
[RequireComponent(typeof(Toggle))]
|
|||
|
public class UiToggleVC : MonoBehaviour, IPointerDownHandler
|
|||
|
{
|
|||
|
private Toggle _toggle;
|
|||
|
public event UnityAction<bool> onToggleClick;
|
|||
|
|
|||
|
private void Awake()
|
|||
|
{
|
|||
|
_toggle = GetComponent<Toggle>();
|
|||
|
_toggle.interactable = false;
|
|||
|
var colors = _toggle.colors;
|
|||
|
colors.disabledColor = Color.white;
|
|||
|
_toggle.colors = colors;
|
|||
|
}
|
|||
|
|
|||
|
public void SetOn(bool isOn)
|
|||
|
{
|
|||
|
_toggle.isOn = isOn;
|
|||
|
}
|
|||
|
|
|||
|
public void OnPointerDown(PointerEventData eventData)
|
|||
|
{
|
|||
|
if (onToggleClick != null)
|
|||
|
onToggleClick(!_toggle.isOn);
|
|||
|
}
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 用于控制一组UiToggle的工具
|
|||
|
/// </summary>
|
|||
|
public class UiToggleVCGroup
|
|||
|
{
|
|||
|
private readonly UiToggleVC[] _toggleVcs;
|
|||
|
public event UnityAction<int> onToggleClick;
|
|||
|
|
|||
|
public UiToggleVCGroup(Toggle[] toggles)
|
|||
|
{
|
|||
|
_toggleVcs = new UiToggleVC[toggles.Length];
|
|||
|
for (var i = 0; i < _toggleVcs.Length; i++)
|
|||
|
{
|
|||
|
var index = i;
|
|||
|
_toggleVcs[i] = toggles[i].gameObject.AddComponent<UiToggleVC>();
|
|||
|
_toggleVcs[i].onToggleClick += a =>
|
|||
|
{
|
|||
|
if (a)
|
|||
|
OnToggleClick(index);
|
|||
|
};
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void SetToggle(int index)
|
|||
|
{
|
|||
|
for (var i = 0; i < _toggleVcs.Length; i++)
|
|||
|
_toggleVcs[i].SetOn(index == i);
|
|||
|
}
|
|||
|
|
|||
|
private void OnToggleClick(int index)
|
|||
|
{
|
|||
|
if (onToggleClick != null)
|
|||
|
onToggleClick(index);
|
|||
|
}
|
|||
|
}
|