SteeringManager
的 behaviors
是一组可以控制对象运动的函数集合。这些函数中的每一个都是一个可以修改对象运动行为的插件,可以相互组合使用以实现特定的目标。
以下是 behaviors
可用的函数。每个函数的参数类型和返回值类型都会在函数的注释中标明。
将对象移向目标位置。估算的参数是减速半径和最大速度。
seek (target: Vector2, deceleration: number, maxSpeed: number): SteeringForce
引导对象远离目标位置。估算的参数是减速半径和最大速度。
flee (target: Vector2, deceleration: number, maxSpeed: number): SteeringForce
使对象靠近目标位置并停下。估算的参数是减速半径、最大速度和一个在目标位置前停止的半径。
arrive (target: Vector2, deceleration: number, maxSpeed: number, slowingRadius: number): SteeringForce
使对象跟踪运动中的目标物体。估算的参数是追击预测时间和最大速度。
pursue (target: MovingObject, maxPrediction: number, maxSpeed: number): SteeringForce
使对象回避运动中的目标物体。估算的参数是逃避预测时间和最大速度。
evade (target: MovingObject, maxPrediction: number, maxSpeed: number): SteeringForce
使对象漫步,随机地改变运动方向。估算的参数是最大速度、变化最大角度和漫步圆半径。
wander (maxSpeed: number, maxRotation: number, wanderRadius: number, wanderDistance: number): SteeringForce
让对象避开障碍物,以避免碰撞。估算的参数是感知范围、最大检测距离和角度,以及转动速度。
obstacleAvoidance (maxSpeed: number, detectionRange: number, avoidDistance: number, avoidAngle: number, reactionTime: number): SteeringForce
让对象避开墙体,以避免碰撞。估算的参数是射线数量、射线长度、最大检测距离和角度,以及转动速度。
wallAvoidance (maxSpeed: number, feelerSegmentLength: number, detectionRange: number, avoidDistance: number, avoidAngle: number, reactionTime: number): SteeringForce
使对象沿着一条路径移动。估算的参数是最大速度、路径、到达路径节点的距离以及到达路径的最大速度。
followPath (maxSpeed: number, path: Array<Vector2>, waypointThreshold: number, maxWaypointSpeed: number): SteeringForce
使对象跟踪带有偏移量的运动中的目标物体。估算的参数是追击预测时间、最大速度和偏移量。
pursuitOffset (leader: MovingObject, pursuitOffset: Vector2, maxPrediction: number, maxSpeed: number): SteeringForce
使对象移动到两个移动的目标物体之间。估算的参数是两个目标物体、将到达的距离和最大速度。
interpose (objectA: MovingObject, objectB: MovingObject, closeDistance: number, maxSpeed: number): SteeringForce
每个函数的返回值都是一个向量,表示所施加的力的大小和方向。此向量可以与其他行为的返回值组合,以得出最终的施力结果。
以下代码片段展示了如何使用 SteeringManager
的 behaviors
:
import SteeringManager from 'yuka';
const agent = new MovingObject();
const steering = new SteeringManager( agent );
// 定义位于 ( 10, 1 ) 的目标位置
const target = new Vector2( 10, 1 );
// 定义一个可以减速到达的施力
const slowingForce = steering.behaviors.arrive( target, 1, 6, 1 );
// 定义一个可以避免碰撞的施力
const avoidanceForce = steering.behaviors.obstacleAvoidance( 6, 100, 10, Math.PI * 0.5, 0.1 );
// 将这些施力组合起来
const steeringForce = slowingForce.add( avoidanceForce );
// 将施力应用于移动对象
agent.applyForce( steeringForce );