Unity人工智能AI编程知识.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Unity⼈⼯智能AI编程知识 群组⾏为: 群组⾏为: 模拟鸟群⾏⾛或⼈群⾏⾛过程的称之为群组⾏为 分散 、队列 、 聚集 分散:在群体内,个体必须与其他个体之间保持⼀定的距离,当⼩于那个距离时,就要分散开来。 实现原理:确定需要分散的范围separationDistance,获取在该范围内的个体,计算出当前个体与(当前个体的周围个体)的相反作⽤⼒的 合⼒,即 合⼒ += (当前个体位置-其他个体位置); 但是,由于我们是想要当前个体位置与其他个体位置的距离越⼩,产⽣的相反作⽤⼒越⼤,所以 相反作⽤⼒= (当前个体位置 -其他个体位 置).normalized / (当前个体位置-其他个体位置).magnitude ,这样就能够距离越⼩,产⽣的相反作⽤⼒越⼤,反之越⼩。(注意:个⼈ 之间的距离不能⼩于1,不然会发⽣异常,也就是除数会⽆穷⼩!导致分散⼒⽆穷⼤!) 相反作⽤⼒的总体意思就是 当前个体位置-其他个体位置,即得到⼀个 其他个体位置 指向 当前个体位置的 三维向量 这个相加之后的⼒就是分散合⼒,⾄于我上⾯说的当距离越⼩,作⽤⼒越⼤是根据实际需求来决定的。 这样,我们得到了⼀个分散合⼒ 队列:在群体内,个体的朝向必须保持与队列朝向⼀致 实现原理: 队列朝向的获取:队列指的是 当前个体的周围的个体的平均朝向,那么我们⼀样根据上⾯的相同的原理获取到周围个体,然后周围个体的 朝向就是transform.forward 将这些周围个体朝向 全部相加起来,再求平均,即得到了队列朝向。 ⽽我们想要的⽬的是 将当前朝向 逐渐 朝向 队列朝向。那么我们需要加⼀个⼒,这个⼒叫队列趋向⼒ 我们将队列朝向向量-当前个体朝向向量,当前个体朝向向量是transform.forward,这样获取到⼀个队列趋向⼒,为什么会要这样算?因为 队列朝向向量-当前个体朝向向量是根据物理上的四边形原则,即合⼒、分⼒的⼀个原理来得出的。如果我们只是将队列朝向向量当做队列 趋向⼒的话,这样变化幅度很⼩,⽽我们直接计算出⼀个能够让当前个体受⼒变为队列朝向的分⼒,变化幅度就很⼤。若还是不理解的话, 可以看下物理的合⼒、分⼒的解释以及四边形原则,在这⾥ 队列朝向就是合⼒,当前个体原本的受⼒和队列趋向⼒都是分⼒,2个分⼒合起 来就是⼀个合⼒,即 当前个体原本的受⼒(当前朝向向量)+队列趋向⼒ = 队列朝向向量 ,这样我们也能推导出: 队列趋向⼒=队列朝向向 量-当前朝向向量。 这样,我们就得到了⼀个队列趋向⼒ 聚集:与分散相反原理。 我们在分散不发⽣的情况下才产⽣聚集,⼀样地获取周围个体,但是我们不是计算出聚集合⼒什么的,⽽是计算出周围个体的中⼼点,中⼼ 点计算⽅法:周围个体的位置之和/周围个体数量 然后,中⼼点-当前个体位置=当前个体位置 朝向 中⼼点 的向量,然后这个向量就是我们的聚集⼒ 如果对聚集⼒的⼤⼩有点不满意的话,推荐:将聚集⼒的⼤⼩设置为当前速度的⼤⼩ 经过以上说明,我们得到了三个⼒:分散合⼒、队列趋向⼒、聚集⼒,这三个⼒都可以分别设置⼀个权重,来调整它们的影响,加权重的意 思就是给⼒乘以⼀个值 然后,我们将这三个⼒相加得到了⼀个 最终合⼒,我们是⽤这个最终合⼒来影响当前物体的 根据⽜顿第⼆定律:F=ma , 故 a= F/m (F是最终合⼒,a是加速度(m/s^2) m是质量(kg) ) 所以,在Update⾥⾯我们可以通过这个公式计算出 最终合⼒对物体产⽣的加速度a 当前速度+=a*Time.deltaTime 这样处理加速度对当前速度的影响,当前速度是⼀个三维向量 我们通过使⽤Quaternion.Slerp(transform.rotation,⽬标四元数, 变化系数)来逐渐旋转当前个体的朝向,⾯向当前速度的朝向,⽬标四元数 ⽤Quaternion.LookRotation(当前速度)来获取。 移动的话可以⽤Translate 直接朝向当前个体的前⽅forward来移动,速度⼤⼩为当前速度⼤⼩ (2019/05/06更新)在以上基础上,新增2个⼒:移动恒⼒(可选)、⽬标趋向⼒(可选)。 移动恒⼒ = 当前速度.normalized * 初始速度⼤⼩(⽤户⾃定义速度⼤⼩) ⽬标趋向⼒ = (⾃⾝指向⽬标向量.normalized - 当前朝向(transform.forward)) * ⽬标趋向速度(⽤户⾃定义速度⼤⼩) 注意:当前速度是⼀个三维向量Vector3,当前朝向是transform.forward,请勿以为当前速度就是当前朝向,当前速度会影响当前朝向。 FSM有限状态机: 有限状态机: 个⼈理解:FSM就是⼀个控制状态切换的集中处理器,⽤⼀个FSMSystem管理着所有FSMState,每个FSMState(状态)都有它⾃⾝对应 的转换事件(
- 粉丝: 167
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx