在Yuka.js库中,weight(权重)用于ObstacleAvoidanceBehavior(避障行为)中的目标权重计算。
当一个实体试图避开一个障碍物时,ObstacleAvoidanceBehavior会根据所在位置的距离和角度确定与障碍物之间的避让通道,但不同的障碍物对实体的影响可能不同,因此需要使用权重来调整这种影响。
实体将在处理每个障碍物前,获取包含三个值的权重对象,分别是:
然后,对于实体和障碍物之间的每个避让通道,都会计算一个总权重值,来反映该通道上所有障碍物的影响。计算公式如下:
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;
其中,distanceWeight
、velocityWeight
和radiusWeight
都是对应的权重值,obstacleWeight
是当前障碍物的权重值。实体最终选择具有最高总权重值的避让通道来躲避障碍物。
需要注意的是,权重计算是一个相对的过程,实体和障碍物之间的距离和角度等因素都可能影响权重值。因此,权重值的范围可以在0到1之间,并不能精确地表示实体和障碍物之间的关系。
以上就是Yuka.js库中ObstacleAvoidanceBehavior的weight的中文技术文档。