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() { ...
随机推荐
- 0. 前言【从零开始学Spring Boot】
[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...
- js数据类型 --运算符
基本数据类型: number: var a=1; string: var str='123'; boolean: var b1=false; null:var c1=null; //打印结果为 obj ...
- JS 变量是否有值的判断
var node; …… 判断 node 是否有值,是否为 undefine,是否 null,直接使用两个!!,否定之否定: if (!!node){ .... }else{ .... } 这个条件判 ...
- 关于Git的一些总结【自用】
创建ssh keyssh-keygen -t rsa -C "邮箱" cat is_rsa.pub 获取public key ssh -T git@github.com 测试是 ...
- Patrick Hughes - 错觉3D雕塑艺术
Pictures Patrick Hughes (artist) From Wikipedia, the free encyclopedia Patrick Hughes. Leaning on a ...
- 10.Ubuntu操作系统及python2.7、3.5 exe
Ubuntu操作系统 链接:https://pan.baidu.com/s/1cu_eYN1GnW5EwVYrXMJbEg 密码:advq python-3.5.3_32位 链接:https://pa ...
- 《算法》第四章部分程序 part 4
▶ 书中第四章部分程序,加上自己补充的代码,图的深度优先遍历 ● 无向图的深度优先遍历,有向 / 无向图代码仅若干方法名不同,包括递归和非递归版本,去掉了顶点有效性的检查 package packag ...
- MySQL 5.7 时间显示修改(log_timestamps UTC)
https://blog.csdn.net/leshami/article/details/78952842 在MySQL 5.7版本中,日志记录时间发生了变化,使用了UTC方式来记录日志时间,也就是 ...
- python3的命令行参数传递
#coding:utf-8#命令行参数传递,例如输入: python <文件名>.py -help#这个结果就会打印help#sys.argv[0]代表"文件名",第一 ...
- Flex4学习笔记 checkBox RadioButton DropDownList colorPicker
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...