效果演示:
![](https://i-blog.csdnimg.cn/direct/0533634248d5441d963129eb8e0a9c19.gif)
更新内容:
-
StepManager添加 清除步骤 和 设置步骤 方法;
-
StepDemo添加 多流程选择 和 GUI提示;
-
添加代码注释。
代码更新:
using System;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 简易流程管理器
/// </summary>
public static class StepManager
{
/// <summary>
/// 步骤索引
/// </summary>
public static int Index = 1;
/// <summary>
/// 步骤事件,用于封装成事件方法
/// </summary>
private static List<Action> Step = new List<Action>();
/// <summary>
/// 执行下一步骤
/// </summary>
public static void NextStep()
{
//检查是否包含当前步骤
if (Index - 1 < Step.Count)
{
//执行当前步骤内的事件
Step[Index - 1].Invoke();
Debug.Log(string.Format("<color=yellow>{0}</color>", $"执行步骤:{Index}"));
}
else
{
Debug.Log(string.Format("<color=red>{0}</color>", "超出步骤管理器"));
}
Index++;
}
/// <summary>
/// 添加步骤
/// </summary>
public static void StepAdd(Action action)
{
Step.Add(action);
}
/// <summary>
/// 清除步骤
/// </summary>
public static void StepClear()
{
Step.Clear();
Index = 1;
}
/// <summary>
/// 设置步骤:下一步骤将从指定数值步骤开始
/// </summary>
public static void StepSet(int index)
{
if (index >= 1 && index <= Step.Count)
{
Index = index;
Debug.Log(string.Format("<color=yellow>{0}</color>", $"步骤索引设置为:{Index}"));
}
else
{
Debug.Log(string.Format("<color=red>{0}</color>", $"无效的步骤索引:{index}"));
}
}
}
using TS.Tools;
using UnityEngine;
/// <summary>
/// 简易流程管理器测试Demo
/// </summary>
public class StepDemo : MonoBehaviour
{
private void Awake()
{
//默认开始流程测试一
ProcessTest01();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StepManager.NextStep();
}
if (Input.GetKeyDown(KeyCode.Alpha1))
{
//开始流程测试一
ProcessTest01();
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
//开始流程测试二
ProcessTest02();
}
if (Input.GetKeyDown(KeyCode.Alpha3))
{
//设置流程索引至第3步
StepManager.StepSet(3);
}
}
/// <summary>
/// GUI提示
/// </summary>
void OnGUI()
{
GUIStyle fontStyle = new GUIStyle();
fontStyle.alignment = TextAnchor.UpperLeft;
fontStyle.fontSize = 40;
fontStyle.normal.textColor = Color.white;
GUI.Label(new Rect(20, 20, 50, 60),
"键盘空格:执行下一步\n\n" +
"键盘 1 键:开始流程测试一\n\n" +
"键盘 2 键:开始流程测试二\n\n" +
"键盘 3 键:将当前流程步骤跳转至第 3 步", fontStyle);
}
/// <summary>
/// 流程测试一
/// </summary>
void ProcessTest01()
{
//清除步骤
StepManager.StepClear();
Debug.Log(string.Format("<color=cyan>{0}</color>", "开始流程测试一"));
//第一步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第1步");
});
//第二步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第2步");
});
//第三步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第3步");
});
//第四步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第4步");
});
//第五步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第5步");
});
//第六步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第6步");
});
//第七步
StepManager.StepAdd(delegate
{
Debug.Log("测试一:执行第7步");
});
}
/// <summary>
/// 流程测试二
/// </summary>
public void ProcessTest02()
{
//清除步骤
StepManager.StepClear();
Debug.Log(string.Format("<color=cyan>{0}</color>", "开始流程测试二"));
//第一步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第1步");
});
//第二步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第2步");
});
//第三步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第3步");
});
//第四步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第4步");
});
//第五步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第5步");
});
//第六步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第6步");
});
//第七步
StepManager.StepAdd(delegate
{
Debug.Log("测试二:执行第7步");
});
}
}