Steering Behaviors
【Steering Behaviors】
1、Seek
下述的算法是一个基本Seek行为,但不带任何Steering输出的力。在该公式作用下,游戏个体的移动方式是直线型的,如果target的位置变了的话,个体会立即响应,并且会以新的方向,以直线的形式向目标位置靠近,这会给人一种从当前路径突兀的变换到新路径的感觉。

Seek行为被分解为两个力:目标速度,和转向速度。目标速度始终朝向目标位置,转向力是目标速度减去个体的当前速度得出的,它的物理意义就是向着目标位置给个体一个推力。


计算了转向力之后,它必须和原先版本的速度方向合成,再施加给个体。


注意,seek中要限制steering的最大值,否则每一次 velocity+steering 均会等于 desired velocity。
2、Flee。
Flee的desired velocity调整为seek的相反位置:


使用Flee算法,可以避免角色大幅转向(如180度)问题,如下,橘色为转向曲线:

注意:Flee中也要对 steering 限速。
3、Arrival
Seek行为使个体向目标位置移动,当个体移动到目标点后,算法仍旧作用在个体之上,对它施加转向力,这会导致个体在目标点周围来回移动。
Arrival行为会规避个体移动超过目标点的现象,当个体靠近目标点时,它会使个体减速,最终停在目标点上。
行为被分成两个阶段:
1)第一阶段是个体还远离目标点时,它的工作方式和之前介绍的Seek行为一样
2)第二阶段是个体靠近目标点时,在减速范围内。



注意:Arrival 中不需要对 steering 限速,因为如果desired_velocity降为0,那么转向力会是velocity,那么它和速度方向的合力为 0,个体就不会运动了。
4、Wander
游戏AI的前方加一个圈,圈的半径以及角色到圈的距离越大,施加在角色身上的推力就越强。
1)CircleCenter 向量。

2)displacement,计算移位力


综合起来就是以下这样:


5、Persulit



当T是一个常数时,会有一个问题:在离目标点很近的距离下,追踪的准确度会变得很差。
这是因为当追踪者靠近目标后,追踪者还是以常数T时间后的位置进行预测。这和真实的追踪行为相违背,真实的追铺在靠近物体后会停止预测,并且以物体当前实际位置作为目标点。
有一个简单的方式来改进我们上面的追捕逻辑,就是用动态的T来替换之前恒定的T。


6、整合

参考:https://cloud.tencent.com/developer/article/1005839
Steering Behaviors的更多相关文章
- CG&Game资源(转)
cg教程下载: http://cgpeers.com http://cgpersia.com http://bbs.ideasr.com/forum-328-1.html http://bbs.ide ...
- 游戏人工智能编程案例精粹(修订版) (Mat Buckland 著)
https://www.jblearning.com/catalog/productdetails/9781556220784 第1章 数学和物理学初探 (已看) 第2章 状态驱动智能体设计 (已看) ...
- “AS3.0高级动画编程”学习:第二章转向行为(上)
因为这一章的内容基本上都是涉及向量的,先来一个2D向量类:Vector2D.as (再次强烈建议不熟悉向量运算的童鞋,先回去恶补一下高等数学-07章空间解释几何与向量代数.pdf) 原作者:菩提树下的 ...
- 代码本色 用编程模拟自然系统 (Daniel Shiffman 著)
https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.7/p5.js http://www.box2d.org http://www.jbox2d.org ...
- ARTIFICIAL INTELLIGENCE FOR GAMES (Ian Millington / John Funge 著)
相关网站:http://www.ai4g.com PART I AI AND GAMESCHAPTER1 INTRODUCTIONCHAPTER2 GAME AIPART II TECHNIQUESC ...
- BEST FREE UNITY ASSETS – OVER 200 CURATED QUALITY ASSETS
http://www.procedural-worlds.com/blog/best-free-unity-assets-categorised-mega-list/ BEST FREE UNITY ...
- 【C/C++开发】c++ 工具库 (zz)
下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形.图像.游戏.人工智能等各个方面,感觉是一个比较全的资源.供参考! 原文的出处:http://www.codemonsters.de/ho ...
- iOS10之Expected App Behaviors
昨天上架到appStore的时候碰到个问题,构建好后上传到itunesconnect的的包都用不了, 显示错误为:此构建版本无效. 或者英文显示为:ITC.apps.preReleaseBuild.e ...
- 开发Yii2过滤器并通过behaviors()行为调用
在Yii2的几乎每个controller中,我们都会看到一个函数behaviors(),通常,我们用这个函数来配置控制器的权限,例如:public function behaviors() { ...
随机推荐
- 关于js中的时间——计算时间差等
获取当前(系统)时间: var NowDate= new Date(); // 获取当前日期时间 // 输出为: Wed May 03 2017 14:52:08 GMT+0800 (中国标准时间) ...
- StanFord ML 笔记 第二部分
本章内容: 1.逻辑分类与回归 sigmoid函数概率证明---->>>回归 2.感知机的学习策略 3.牛顿法优化 4.Hessian矩阵 牛顿法优化求解: 这个我就不记录了,看到一 ...
- wgrib读grib数据
该文章来自博客:http://windforestwing.blog.163.c ... 412007103084743804/如有错误 ,大家及时指出啊!ps:meteoinfo可以直接处理grib ...
- python if all
#encoding:utf-8 s=['1','9']sta='56789'# if all(t not in sta for t in s):# print staif all(t not ...
- 关于thinkphp5被入侵后的一些思考
最近一段时间thinkphp5爆出漏洞 request.php中的请求过滤不严 是得web端 可以直接写入一个文件到服务器上 进而可得webshell权限 我的一个客户 就是这样被入侵了 刚开始 ...
- 30.纯 CSS 创作一个晃动的公告板
原文地址:https://segmentfault.com/a/1190000014983030 感想: 绝对定位+动画 HTML代码: <div class="signboard&q ...
- .Net 上传文件和下载文件
一.上传文件 1.普通的form表单提交 注意点: 请求方式必须为Post. form表单里必须设置enctype属性(enctype = "multipart/form-data" ...
- centos7系统分区方案
个人认为:硬盘如果够大,可以单独划分一个data盘,以防止rm -rf / Centos 7.2基础安装和配置(含分区方案建议) 参考网站: https://www.cnblogs.com/set- ...
- 页面适应电脑和手机屏幕initial-scale 1:0 user-scalable=yes
2017年09月25日 11:30:27 Goddess_liangyanli 阅读数:7324 标签: 手机 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- leetcode991
class Solution: def brokenCalc(self, X: 'int', Y: 'int') -> 'int': if X>=Y : return Y-X else: ...