原理非常简单的互斥按钮组件,不多介绍了
代码
// ******************************************************************
// /\ /| @file StateButton.cs
// \ V/ @brief 状态按钮组件
// | "") @author Shadowrabbit, yingtu0401@gmail.com
// / |
// / \\ @Modified 2021-01-05 16:32:15
// *(__\_\ @Copyright Copyright (c) 2021, Shadowrabbit
// ******************************************************************
using UnityEngine;
using UnityEngine.UI;
using XLua;
public class StateButton : Button
{
public bool IsSelect
{
get => isSelect;
set
{
isSelect = value;
Refresh();
}
}
[SerializeField] private bool isSelect; //按钮是否被选中
public GameObject isSelectObj; //按钮选中状态下显示的物体
public GameObject isNotSelectObj; //未选中状态下显示的物体
/// <summary>
/// 刷新按钮状态
/// </summary>
private void Refresh()
{
if (isSelectObj != null)
{
isSelectObj.SetActive(isSelect);
}
if (isNotSelectObj != null)
{
isNotSelectObj.SetActive(!isSelect);
}
}
/// <summary>
/// 参数改变回调
/// </summary>
protected override void OnValidate()
{
base.OnValidate();
Refresh();
}
}
编辑器代码
// ******************************************************************
// /\ /| @file StateButtonEditor.cs
// \ V/ @brief 状态按钮编辑器
// | "") @author Shadowrabbit, yingtu0401@gmail.com
// / |
// / \\ @Modified 2021-01-05 17:21:40
// *(__\_\ @Copyright Copyright (c) 2021, Shadowrabbit
// ******************************************************************
using UnityEditor;
[CustomEditor(typeof(StateButton))]
public class StateButtonEditor : Editor
{
private SerializedProperty m_isSelect; //是否处于选中状态
private SerializedProperty m_isSelectObj; //按钮选中状态下显示的物体
private SerializedProperty m_isNotSelectObj; //按钮非选中状态下显示的物体
private void OnEnable()
{
m_isSelect = serializedObject.FindProperty("isSelect");
m_isSelectObj = serializedObject.FindProperty("isSelectObj");
m_isNotSelectObj = serializedObject.FindProperty("isNotSelectObj");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(m_isSelect);
EditorGUILayout.PropertyField(m_isSelectObj);
EditorGUILayout.PropertyField(m_isNotSelectObj);
serializedObject.ApplyModifiedProperties();
}
}