文章目录
1 想法核心机制流程
当一个想法生效,从最底层到生效,所经历的顺序应该为:
Pawn实例的Tick()
->Pawn_NeedsTracker实例的NeedsTrackerTick()
->Need_Mood实例的NeedInterval()
->Need_Seeker父类的NeedInterval()
->Need_Mood实例的CurInstantLevel访问器
->ThoughtHandler实例的TotalMoodOffset()
->ThoughtHandler实例的GetDistinctMoodThoughtGroups()
->ThoughtHandler实例的GetAllMoodThoughts()
->SituationalThoughtHandler实例的AppendMoodThoughts()
->SituationalThoughtHandler实例的CheckRecalculateMoodThoughts()中完成想法实例的创建
->Thought_Situational实例的Active访问器决定当前想法是否满足生效条件
->回到Need_Seeker中设定CurLevel值
至此想法的level值已完成设定,CurLevel会影响各种事情,比如角色在rest_need上的level等级超过最大容量,pawn分配行为时会尝试休息,无视当前的策略方针
2 各部分类介绍
2.1 Pawn_NeedsTracker
我把它称之为需求追踪器
Pawn_NeedsTracker 实例创建时会与pawn绑定,并且按照一个比较sb的过滤规则过滤掉一部分need,Pawn_NeedsTracker 主要负责管理调度pawn身上的所有need,以及对外暴露need相关接口。
2.2 Need_Mood
心情上的需求,继承自Need_Seeker,实现心情相关的需求功能,内部有三个重要参数
public ThoughtHandler thoughts; //负责处理角色想法相关
public PawnObserver observer; //负责监视角色的交互来产生 回忆型心情
public PawnRecentMemory recentMemory; //主要记录最近有没有外出 有没有灯光
2.3 ThoughtHandler
想法处理器,内部把想法分为两类,
public MemoryThoughtHandler memories; //回忆型的想法
public SituationalThoughtHandler situational; //情景型的想法
并且负责处理SocialThoughts社会型想法,就是人与人之间的看法,这个由另一个模块Pawn_RelationsTracker关系追踪器来控制,这里暂且无视。
ThoughtHandler中有个核心的函数public float TotalMoodOffset()
用来计算当前pawn所有生效的非社会型想法 对 心情上的需求 的影响值
2.4 SituationalThought
情景型想法,继承自Thought,主要为这个想法提供了一个理由。
2.5 SituationalThoughtHandler
情景型想法处理器,负责情景型想法的管理,生效,过期相关的判定。
如果这篇文章对你有帮助,点赞收藏支持一下呗!