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() { ...
随机推荐
- 输出单个文件中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。程序设计思路。
将文件内容读取后存入StringBuffer中. 利用函数将段落分割成字符串,按(“,”,“.”,“!”,“空格”,“回车”)分割,然后存入数组中. 遍历数组,并统计每个单词及其出现的次数. 要求出文 ...
- 域控场景下windows安全日志的分析--审计认证行为和命令的历史记录
https://www.cnblogs.com/KevinGeorge/p/8563458.html 一.域控windows安全日志基本操作 1.打开powershell或者cmd 1 #gpedit ...
- 1. ibatis 查询的sql列存在相同的列名
如果SQL语句存在两个相同的查询列名,则映射时,取第一个列名的值进行映射 <?xml version="1.0" encoding="UTF-8" ?&g ...
- 转载:“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
转载来自:http://www.cnblogs.com/A-Song/archive/2012/03/23/2413782.html 问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. ...
- PHP Composer 包管理器的安装和使用
一,包管理器的安装 01,首先确定 php 命令能够全局使用,要是不能请修改环境变量 02,使用 curl 命令安装 => curl -sS http://install.phpcomposer ...
- js判断用户是客户端还是移动端
js判断用户是客户端还是移动端 Javascript 判断客户端是否为 PC 还是手持设备,有时候项目中需要用到,很方便的源生检测,方法一共有两种 1.第一种: function IsPC() { ...
- ThinkPHP输入验证和I方法使用
在Web开发过程中,我们经常需要获取系统变量或者用户提交的数据,这些变量数据错综复杂,而且一不小心就容易引起安全隐患,但是如果利用好ThinkPHP提供的变量获取功能,就可以轻松的获取和驾驭变量了. ...
- linux指令tar笔记
tar 工具常用选项如表所列. 选项 说明 -c 创建存档文件,与-x相斥 -t 列出档案文件的文件列表 -x 解包存档文件,与-c相斥 -A 合并存档文件 -d 比较存档文件与源文件 - ...
- git push error HTTP code = 413
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large 将 ...
- JEECG-P3开发专题 - 开发环境搭建入门
官方标准开发工具: 1 .IDE Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2) Build id: 2 ...