县挫伪 发表于 2025-9-9 21:31:44

U3D动作游戏开发读书笔记--2.1一些通用的预备知识

2.1 一些通用的预备知识:

2.1.1 使用协程分解复杂逻辑

试想一下如何实现一个简单的NPC人物行为,例如是村民。村民饿了会去吃饭,困倦了会去睡觉。上来上一个状态机?其实用不着这么复杂,可以使用协程来实现。
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
页: [1]
查看完整版本: U3D动作游戏开发读书笔记--2.1一些通用的预备知识