找回密码
 立即注册

Unity3d中实现群集之Seek(靠近)、Flee(离开)、Arrive(抵达)

已有 1117 次阅读2012-12-30 21:50 |个人分类:Unity3D| 智能, 控制力, 牵引力, 用户

1.Seek操控行为,返回一个操控智能体到达目标位置的力。智能体穿过目标,然后传向并再次靠近。穿越的次数取决于最大速度和最大牵引力(均由用户控制)。

(当前智能体位置 - 目标位置).Normalize() *= 最大速度;

计算预期速度:这个速度是智能体在理想化情况下到达目标位置所需的速度。它是从智能体到目标的向量,大小为智能体的最大速度。

预期速度 - 智能体当前的速度(一般在初始化时随机生成) = 控制力;

 

2.Flee 产生一个操控智能体离开的力,与Seek相反。

和Seek的实现区别仅在于(目标位置 - 当前智能体位置)

不过可以在此基础上添加一个距离条件,让目标位置和当前智能物体的距离小于我们的条件时才有效。

 

3.Arrive行为是一种操控智能体慢慢减速直至停在目标位置的行为。而seek行为则不能很好的停下来。

enum Deceleration { slow = 3, normal = 2, fast =1 } ;
double speed = dist / (double) deceleration * decelerationTweaker);

书中介绍的为根据距离与一个自定义的减速枚举和DecelerationTweaker来减速,
但似乎为了简化大家都是给一个定值,省略掉enum。

 

3.我的测试:白色球为目标点,大鱼为Arrive控制,小鱼为Seek控制。不过从截图中表现不出什么,等学习到一个阶段完后录个video。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-3 16:10 , Processed in 0.120764 second(s), 16 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

返回顶部