Skip to content

搜索实体

方法

querySelector()

搜索满足条件的第一个实体。

输入参数

参数必填默认值类型说明
selectorGameSelectorString选择器的搜索方式

返回值

类型说明
GameEntity | null如有,返回搜索到的实体对象,反之为空

定义于 #L9711

点击查看示例代码
javascript
const thePoint = world.querySelector('#出生点-1'); // 搜索模型名字为"出生点-1"的首个实体

javascript
const thePoint = world.querySelector('#出生点-1');

// 将玩家出生点设置在模型的位置
world.onPlayerJoin(({ entity }) => {  
  entity.player.spawnPoint.copy(thePoint.position)
});

querySelectorAll()

搜索满足条件的所有实体,返回一个列表。

输入参数

参数必填默认值类型说明
selectorGameSelectorString选择器的搜索方式

返回值

类型说明
GameEntity如有,返回搜索到的实体对象列表,反之为空列表

定义于 #L9720

信息

💡提示

querySelectorquerySelectorAll 两者区别是

querySelector 搜索满足条件的第一个实体,如果没有搜索到,则返回 null

querySelectorAll 搜索满足条件的所有实体,返回是一个数组,如果没有搜索到实体,则返回空的数组。

点击查看示例代码
javascript
// 按下左键,在控制台输出当前所有玩家的生命状态
world.onRelease(({ button }) => {
  if (button === 'action0'){
    world.querySelectorAll('player').forEach((user)=>{
      console.log(`{user.player.name} : {user.hp}`)
    })
    console.log('---------------------------')
  }
})

搜索指定范围中的全部实体

输入参数

参数必填默认值类型说明
boundsGameBounds3要搜索的范围边界

返回值

类型说明
GameEntity[]范围内的全部实体

定义于 #L9772

点击查看示例代码
javascript
// 搜索范围 { x: 48-72, y:8-20, z: 48-72 }
const bounds = new GameBounds3(new GameVector3(48, 8, 48), new GameVector3(72, 20, 72));

// 使用 forEach 遍历实体列表,输出玩家的名称。
world.searchBox(bounds).forEach( (entityInBounds) => {
  // 在区域的玩家
  if (entityInBounds.isPlayer) {
    console.log(`在区域内的玩家:${entityInBounds.player.name}`)
  }
});

raycast()

射线检测,从 origin原点位置向 direction 方向投射一条隐形的射线,返回碰到的实体或方块。

输入参数

参数必填默认值类型说明
originGameVector3射线的起点
directionGameVector3射线的方向
optionsPartial‹GameRaycastOptions›选项配置参数

返回值

类型说明
GameRaycastResult发射射线后的结果

定义于 #L9766

点击查看示例代码
javascript
/* 按下左键,在玩家位置向脚下发射一条射线,在控制台输出检测结果 */
world.onPress(({ button, entity }) => {
  if(button === 'action0'){
    const res = world.raycast( entity.position, new GameVector3(0,-1,0))
    console.log(JSON.stringify(res))
  }
})

接口

GameSelectorString

选择器(Selectors)可以方便搜索游戏内的全部对象。选择器接口是参照 DOM APIs 而设。

搜索方式类似jQuery选择器的语法,例如:

标识前缀类型说明
*string搜索世界中的全部实体
#string搜索该模型名称的实体
.string搜索该模型标签实体
playerstring搜索游戏中的全部玩家

定义于 #L13108

javascript
const entities = world.querySelector('*'); // 世界中的全部实体
const theChair = world.querySelector('#chair'); // 模型名称为"chair"的首个实体
const players = world.querySelectorAll('player'); // 游戏中的全部玩家
const boxes = world.querySelectorAll('.box'); // 标签带有"box"的全部实体
const redBox = world.querySelector('.box .red');// 标签同时带有"box"和“red”的首个实体

GameRaycastOptions

进行射线检测的参数配置

参数类型说明
maxDistancenumber允许射线穿越的最大距离
ignoreFluidboolean如果为真,则射线无视液体
ignoreVoxelboolean如果为真,则射线无视方块
ignoreEntitiesboolean如果为真,则射线无视实体
ignoreSelectorGameSelectorString被射线检测忽略的实体选择器

定义于 #L12350


GameRaycastResult

射线检测(raycast)的结果,包含射线和所击中目标的信息。

参数类型说明
originGameVector3射线的起点
directionGameVector3射线的方向
distancenumber射线穿越的距离
hitboolean如果为真,则射线击中了目标
hitEntityGameEntity | null射线所击中的实体
hitPositionGameVector3射线击中的位置
hitVoxelnumber射线所击中的方块 id (如未击中方块,则为 0)
voxelIndexGameVector3如果射线击中的是方块,则返回所击中方块的网格坐标。
normalGameVector3射线所击中平面的法向量

定义于 #L12269