AABB
AlignmentBehavior
ArriveBehavior
AStar
BFS
BoundingSphere
BVH
BVHNode
Cell
CellSpacePartitioning
CohesionBehavior
CompositeGoal
ConvexHull
Corridor
CostTable
DFS
Dijkstra
Edge
EntityManager
EvadeBehavior
EventDispatcher
Behavior
FollowPathBehavior
FuzzyAND
FuzzyCompositeTerm
FuzzyFAIRLY
FuzzyModule
FuzzyOR
FuzzyRule
FuzzySet
FuzzyTerm
FuzzyVariable
FuzzyVERY
GameEntity
Goal
GoalEvaluator
Graph
GraphUtils
HalfEdge
HeuristicPolicyDijkstra
HeuristicPolicyEuclid
HeuristicPolicyEuclidSquared
HeuristicPolicyManhattan
InterposeBehavior
LeftSCurveFuzzySet
LeftShoulderFuzzySet
LineSegment
Logger
MathUtils
Matrix3
Matrix4
MemoryRecord
MemorySystem
MeshGeometry
MessageDispatcher
MovingEntity
NavEdge
NavMesh
NavMeshLoader
NavNode
Node
NormalDistFuzzySet
OBB
ObstacleAvoidanceBehavior
OffsetPursuitBehavior
OnPathBehavior
Path
Plane
Polygon
Polyhedron
PriorityQueue
PursuitBehavior
Quaternion
Ray
RectangleTriggerRegion
Regular
RightSCurveFuzzySet
RightShoulderFuzzySet
SAT
SeekBehavior
SeparationBehavior
SingletonFuzzySet
Smoother
SphericalTriggerRegion
State
StateMachine
SteeringBehavior
SteeringManager
Task
TaskQueue
Telegram
Think
Time
TriangularFuzzySet
Trigger
TriggerRegion
Vector3
Vehicle
Version
WanderBehavior

weight

在Yuka.js库中,weight(权重)用于ObstacleAvoidanceBehavior(避障行为)中的目标权重计算。

当一个实体试图避开一个障碍物时,ObstacleAvoidanceBehavior会根据所在位置的距离和角度确定与障碍物之间的避让通道,但不同的障碍物对实体的影响可能不同,因此需要使用权重来调整这种影响。

实体将在处理每个障碍物前,获取包含三个值的权重对象,分别是:

  • radius:障碍物的半径。该值越大,障碍物对实体的影响越大。
  • weight:该障碍物的权重值。该值越大,障碍物对实体的影响越强。
  • velocity:该障碍物的速度。如果该障碍物也是移动的,则这个值可以考虑在权重计算中。

然后,对于实体和障碍物之间的每个避让通道,都会计算一个总权重值,来反映该通道上所有障碍物的影响。计算公式如下:

const distanceWeight = 1 - target.distance / maxDistance;
const velocityWeight = target.velocity ? target.velocity.length() / entity.maxSpeed : 1;
const obstacleWeight = target.weight;
const radiusWeight = target.radius / entity.boundingRadius;

const weight = (distanceWeight * radiusWeight * velocityWeight) / obstacleWeight;

其中,distanceWeightvelocityWeightradiusWeight都是对应的权重值,obstacleWeight是当前障碍物的权重值。实体最终选择具有最高总权重值的避让通道来躲避障碍物。

需要注意的是,权重计算是一个相对的过程,实体和障碍物之间的距离和角度等因素都可能影响权重值。因此,权重值的范围可以在0到1之间,并不能精确地表示实体和障碍物之间的关系。

以上就是Yuka.js库中ObstacleAvoidanceBehavior的weight的中文技术文档。