• Games104 gameplay系统笔记


    GamePlay系统
    (1)事件系统
    (2)脚本系统
    (3)可视化脚本
    (4)3C
    (5)AI
    挑战:多样性;可扩展性;快速迭代

    一、事件系统
    (1)消息定义
    (2)回调函数注册
    强引用(引用不随对象销毁而删除,保证引用的安全性,但会导致系统内存增大)
    弱引用(在回调函数中增加判断引用对象是否销毁的逻辑,智能指针)

    (3)消息分发
    1、实现机制:消息队列,相同类型的消息放在一个消息队列里
    在这里插入图片描述
    在这里插入图片描述
    2、消息存储:RingBuffer
    在这里插入图片描述
    3、消息队列的缺陷:不能保证消息执行的顺序

    三、AI

    1、寻路

    (1)步骤:
    Map Representation
    Path Finding
    Path Smoothing

    (2) Map Representation
    Format: WayPoint Network、 Grid、 Navigation Mesh etc.

    WayPoint Network:
    在这里插入图片描述

    Grid:
    缺陷:存储空间大,格子多了访问速度慢(cache miss),难以表达层叠结构

    Navigation Mesh:
    可以是三角形,也可以是多边形(必须是凸多边形);
    灵活性强,寻路速度快;
    生成速度慢;不支持3D空间(例如飞机)

    2、感知

    3、群体

    4、决策
    有限状态机
    行为树
    其他决策算法:
    在这里插入图片描述

    (1)有限状态机
    在这里插入图片描述缺陷:增加新的state时需要考虑和其他state的关系 ,难以管理

    改进:分层有限状态机,增加了状态机的可读性,但可能速度慢
    在这里插入图片描述
    (2)行为树
    状态机是对AI行为的抽象,但并不符合人们的思考方式
    行为树的结点:
    1、Excution Node : 行为树的叶子结点,分为条件结点(Condition Node) 、动作结点(Action Node)
    动作结点有三种状态,success、fail、running
    在这里插入图片描述

    2、Control flow Node :
    在这里插入图片描述
    Sequence: 顺序执行,将子结点依次执行,如果一个结点返回的是false,则停止执行
    Selector: 根据条件执行子结点
    Parallel:并行执行,行为树强于状态机的点,AI可以同时执行多个任务(人类的行为很多时候也是多线程的)
    Decorator,PreCondition:简化条件分支
    在这里插入图片描述

    行为树的Tick:
    行为树每一次都会从根结点重新 tick(而不是从上一个状态)
    行为树在running的结点可能不止一个(优化:可以用event驱动)
    在这里插入图片描述

    行为树的黑板:
    在这里插入图片描述

    行为树的缺点:
    Tick开销大

  • 相关阅读:
    正向代理——流量代理
    使用二叉树的递归套路来解决的问题
    php eayswoole node axios crypto-js 实现大文件分片上传复盘
    Vue.js之组件插槽的使用
    大数据面试经验分享
    Nodejs -- 在Express使用Session认证
    gitlab无法push(pre-receive hook declined)
    NeurIPS 2022 | 基于实例等价性的知识图谱补全
    Vue中组件的三种注册方式
    IPFoxy:什么是数据中心代理IP?好用吗?
  • 原文地址:https://blog.csdn.net/ToryYang/article/details/125827391