参考 FairyGUI 控制器实现的通用性状态控制器,支持任意子状态扩展。适用于 UI 状态切换、角色状态管理、场景状态控制等场景。
特性
- 支持任意类型的状态数据(泛型设计)
- 支持布尔逻辑组合(And/Or)
- 支持状态间自动链接切换
- 编辑器实时预览
- 支持 CodeBind 代码生成
交流QQ群:949482664
核心组件
1. StateControllerMono
主控制器组件,挂载在 GameObject 上,管理所有状态数据。
2. BaseSelectableState<T>
可选择状态基类,用于根据状态名切换不同的数据。
// 示例:根据状态切换图片 public class StateImageForSprite : BaseSelectableState<Sprite> { [SerializeField] private Image m_Image; protected override void OnStateInit() { } protected override void OnStateChanged(Sprite stateData) { m_Image.sprite = stateData; } }
3. BaseBooleanLogicState
布尔逻辑状态基类,支持 None、And、Or 三种逻辑类型。
// 示例:根据布尔结果控制 GameObject 激活状态 public class StateGameObjectForActive : BaseBooleanLogicState { [SerializeField] private GameObject m_Target; protected override void OnStateInit() { } protected override void OnStateChanged(bool logicResult) { m_Target.SetActive(logicResult); } }
使用方法
基本使用
// 获取控制器 StateControllerMono controller = GetComponent<StateControllerMono>(); // 通过名称设置状态 controller.SetSelectedName("DataName", "StateName"); // 通过索引设置状态 controller.SetSelectedIndex("DataName", 0); // 获取当前状态 string currentName = controller.GetSelectedName("DataName"); int currentIndex = controller.GetSelectedIndex("DataName"); // 获取所有状态名 string[] stateNames = controller.GetStateNames("DataName");
直接操作 Data
// 获取数据对象 StateControllerData data = controller.GetData("DataName"); // 设置状态 data.SelectedName = "StateName"; data.SelectedIndex = 0; // 监听状态变化 data.OnSelectedNameChanged += (name) => Debug.Log($"State changed to: {name}"); data.OnSelectedIndexChanged += (index) => Debug.Log($"Index changed to: {index}");
编辑器预览
点击 Inspector 中的 Apply 按钮可实时预览状态效果。
内置扩展
| 类名 | 功能 |
|---|---|
| StateGameObjectForActive | 控制 GameObject 激活状态 |
| StateImageForSprite | 切换 Image 的 Sprite |
| StateImageForSpriteColor | 切换 Image 的 Sprite 和颜色 |
| StateRectTransformForAnchoredPosition | 控制 RectTransform 位置 |
| StateTextForText | 切换文本内容 |
CodeBind 集成
如果安装了 CodeBind,添加宏定义 STATE_CONTROLLER_CODE_BIND 即可在绑定代码时生成状态数据相关代码。
安装方式
通过 Unity Package Manager 安装:
- 打开 Window > Package Manager
- 点击 "+" 按钮,选择 "Add package from git URL..."
- 输入:
https://github.com/XuToWei/StateController.git
依赖
- Unity 2019.4+
- Odin Inspector(收费插件,请自行购买安装)
许可证
MIT License
