2.1 一些通用的预备知识:
2.1.1 使用协程分解复杂逻辑
试想一下如何实现一个简单的NPC人物行为,例如是村民。村民饿了会去吃饭,困倦了会去睡觉。上来上一个状态机?其实用不着这么复杂,可以使用协程来实现。
[code]namespace LearnBook.Chapter2{ /// /// 村民 /// 使用协程模拟村民的行为 不用使用复杂的状态机 /// 适合一些简单的 硬编码实现的 NPC行为 /// public class Villager : MonoBehaviour { #region 状态常量 const float FATIGUE_DEFAULT_VALUE = 5F; const float SATIATION_DEFAULT_VALUE = 5F; private const float FATIGUE_MIN_VALUE = 0.2F; const float SATIATION_MIN_VALUE = 0.2F; #endregion private float mSatiation; //饱食度 private float mFatigue; //疲劳度 private Coroutine mActionCoroutine; //NPC的行为协程 private void OnEnable() { //初始化状态:既不累也不 mSatiation = SATIATION_DEFAULT_VALUE; mFatigue = FATIGUE_DEFAULT_VALUE; //启动行为协程 模拟村民的行为 StartCoroutine(Tick()); } /// /// 模拟村民的行为的协程 /// /// IEnumerator Tick() { while (true) { //更新饱食度和疲劳度 随着时间推移下降 mSatiation = Mathf.Max(0,mSatiation - Time.deltaTime); mFatigue = Mathf.Max(0,mFatigue - Time.deltaTime); if (mSatiation |