每个人物所拥有的 LivePath 会维护一个列表,其中包含沿路径的各类事件:
每个事件都由 PathEvent 对象来表示。LivePath 会保留 PathEventList:PathEvent 的已创建索引的列表,以及事件之间“间隔”的已创建索引的列表。您可以使用 PathEvent 对象保留的数据成员以确定该对象表示的事件的类型,查找其 3D 位置,获取并设置其检查点状态(请参见使用检查点)等等。
您可以通过调用 Bot::GetPathEventList() 在 LivePath 上检索完整的事件列表。然后,您可以使用 PathEventList 类的方法来循环访问列表中的所有事件。
PathEvent 的完整列表包括位于人物当前位置和目标点(例如下边界)后面的事件,以及人物已经通过或选择捷径通过的任何事件。您可能想知道即将发生和已忽略的事件。例如,您可能只关心在一定距离内沿路径向前的事件。
您也可以调用 PositionOnLivePath::GetNextPathEventIdx() 和 PositionOnLivePath::GetPrevPathEventIdx()。然而,有关返回值解释的详细信息,请参见 API 参考中的描述。
通常,您真正需要知道的信息项目只是与下一个事件相关联的 NavTag。例如,如果 NavTag 与某个智能对象相关联,您可能希望人物开始请求智能对象以获取指令。
您只需调用 Bot::GetUpcomingEventNavTag() 便可确定下一个事件的 NavTag,无需直接与 PathEventList 进行交互。
您可以在初始化人物时注册一个自定义事件观察器对象,而不是主动检查路径事件列表以测试是否存在某些情况。每当人物创建、更新或销毁 PathEventList 时都会调用此观察器的方法,从而使您可以响应新路径上的事件。
这可能有助于实施需要执行的自定义初始化步骤,例如向自定义智能对象注册和注销您的人物。例如,如果新路径使用会在游戏过程中关闭的门,您可能希望向控制门的对象注册人物。这样,当门关闭后,门就会通知已计划使用它的角色。您的角色可能会通过触发路径重新计算来对此做出响应。
有关代码示例,请参见 Tutorial_NavTag.cpp 文件。
有关示例实现,请参见 DefaultPathEventListObserver 类。如果您未如上所述提供自己的观察器,默认 NavigationProfile 类会使用 DefaultPathEventListObserver 的实例,这会将对应于 NavGraph 顶点或 NavMesh 和路径边之间的过渡(越过 NavMesh 外部边界)的每个事件标记为检查点。默认情况下,这使角色无需使用捷径即可接近并跟随 NavGraph 边。如果要在自己的实现中保留此行为,请考虑从 DefaultPathEventListObserver 派生您的类,然后从自己类的方法中调用其界面实现。
有关检查点的详细信息,另请参见使用检查点。