spatialIndex
是Yuka
实体管理器(EntityManager
)的一个属性,用于对实体在空间中的位置进行索引,方便空间查询和碰撞检测。
spatialIndex
是一个包含entities
(实体)和nodes
(节点)属性的对象。其中,nodes
是一个四叉树(QuadTree
)数据结构,用于空间分割和快速查询;entities
是节点中存储的实体的数组。
{
entities: [],
nodes: null
}
spatialIndex
提供了以下几个方法:
向spatialIndex
中添加一个实体,并更新四叉树数据结构。
参数:
entity
:要添加的实体,必须包含位置属性:position
。从spatialIndex
中移除一个实体,并更新四叉树数据结构。
参数:
entity
:要移除的实体。更新一个实体的位置,并更新四叉树数据结构。
参数:
entity
:要更新位置的实体。获取与给定轴对齐边界框(AABB
)相交的所有实体。
参数:
aabb
:一个轴对齐边界框,格式为:{ x: number, y: number, z: number, width: number, height: number, depth: number }
。返回值:
AABB
相交的所有实体的数组。清空spatialIndex
中所有实体及四叉树数据结构。
以下示例代码展示了如何使用spatialIndex
:
import { EntityManager } from 'yuka';
const entityManager = new EntityManager();
...
// 向entityManager中添加实体
entityManager.add(entity);
// 更新spatialIndex
entityManager.spatialIndex.updateEntity(entity);
...
// 获取与给定AABB相交的所有实体
const aabb = { x: -1, y: -1, z: -1, width: 2, height: 2, depth: 2 };
const entitiesInAABB = entityManager.spatialIndex.getEntitiesInAABB(aabb);
...
// 移除实体
entityManager.remove(entity);
// 更新spatialIndex
entityManager.spatialIndex.removeEntity(entity);