For the complete documentation index, see llms.txt. This page is also available as Markdown.

已弃用函数

旧版函数

以下函数均为旧版功能,应避免使用。它们目前仍可正常工作,但未来可能不再受支持。所有这些示例都附带了可获取相同信息或实现相同结果的替代方式链接。

玩家进入或离开场景

每当一个头像进入或离开构成你场景的地块,或传送进出时,都会创建一个你可以监听的事件。该事件会被所有头像触发,包括玩家自己的头像。

import {
	onEnterSceneObservable,
	onLeaveSceneObservable,
} from '@dcl/sdk/observables'

onEnterSceneObservable.add((player) => {
	console.log('玩家进入场景:', player.userId)
})

onLeaveSceneObservable.add((player) => {
	console.log('玩家离开场景:', player.userId)
})

这些 observables onEnterScene 和 onLeaveScene 从 '@dcl/sdk/observables' 导入的也已弃用。正确的函数名称相同,但应从 '@dcl/sdk/src/players' 导入。下面的示例中你可以看到两种写法,先是已弃用的版本,然后是正确的版本。

玩家连接或断开连接

通过以下方式获取当前所有已连接玩家的完整列表: getConnectedPlayers.

每当另一个玩家开始或停止被本地引擎渲染时,都会创建一个你可以监听的事件。玩家可能与你站在同一场景,也可能不是,但必须在可视范围内(不一定在视线内)。 onPlayerConnectedObservable onPlayerConnectedObservable 既能检测到玩家新近在附近连接,或进入足够近以处于可视范围,类似地, onPlayerDisconnectedObservable onPlayerDisconnectedObservable 能检测到玩家结束会话或走远。

请记住,如果其他玩家在玩家加载你的场景之前就已经在周围被渲染,那么此事件不会通知新加载的场景这些已存在的玩家。如果你需要跟踪当前所有玩家,可以在场景加载时查询现有玩家,然后监听此事件以获取更新。

查询场景中的所有玩家

你也可以通过调用 getPlayersInScene().

玩家播放动画

每当玩家表演一个表情动作(舞蹈、鼓掌、挥手等)时,你都可以检测到此事件。

该事件包含以下信息:

  • expressionId:所执行表情动作的名称(即: 挥手, 鼓掌, 亲吻)

玩家更改资料

每当玩家对其个人资料进行更改时, onProfileChanged 都会调用该事件。这些更改可能包括穿戴不同的可穿戴物、更改名称、描述、激活便携体验等。

事件数据只包含玩家的 ID 以及该头像资料的版本号,依据 catalyst 服务器。每当传播一次更改,版本号就增加 1。

当此事件被触发时,你可以使用 getUserData() 函数来获取此信息的最新版本,包括玩家所穿戴的可穿戴物列表。你可能需要在调用 getUserData() 之前稍作延迟,以确保该函数返回的版本是最新的。

💡 提示:在使用旧版 web explorer 进行预览测试时,为避免使用随机头像,请在与你的 Metamask 钱包连接的浏览器中运行场景。

场景完成加载

当场景完成加载时, onSceneReadyObservable 会被调用。无论玩家是直接加载进场景,还是从其他地方走到场景中,这都适用。当场景中的所有内容完成初始加载后,包括大型模型等,此事件就会被调用。

已弃用的玩家数据方法

要获取正在运行该场景的当前玩家信息,请使用 getUserData().

下面的示例导入 ~system/UserIdentity 命名空间并运行 getUserData().

你可以通过调用 getPlayerData(),传入一个 Decentraland 账户的 id,来获取附近其他玩家的数据。

两者都满足 getUserData() 和 getPlayerData() 返回与内容 API 通过同样数据结构可用的数据。详见 来自任意玩家的数据

getPlayerData() 只能获取当前附近玩家的数据。它们不一定必须站在同一场景中,但必须处于可视范围内,这是因为这些信息是从正在渲染这些头像的本地引擎中获取的。要在预览中试试这一点,请打开第二个标签页并使用另一个账号登录。

该 getUserPublicKey() 和 getUserAccount() 函数也已弃用。请使用 getPlayer() 。详见 用户数据.

获取天空盒时间

获取领域

是否为预览模式

玩家点击另一名玩家

每当玩家点击另一名玩家时,你都可以检测到一个事件。

该事件包含以下数据:

  • userId:被点击玩家的 id

  • ray:关于该点击射线的信息

    • 方向: Vector3 一个归一化的 Vector3,表示从点击起点到点击命中点的方向。

    • distance: 数值 从起点到命中点的距离,单位为米。

    • origin: Vector3 点击的起点,即执行点击的玩家位置,相对于场景而言。

💡 提示:点击另一名玩家的默认行为是打开玩家护照,你可以在那里查看该玩家的更多信息、将其添加为好友等。你可以通过添加一个 头像修改区域.

玩家锁定/解锁光标

玩家可以在两种光标模式之间切换: 锁定光标 模式以控制相机,或 解锁光标 模式,以便在 UI 上自由移动光标。

玩家可通过点击以下按钮来解锁光标: 鼠标右键 或按下 Esc 键;并通过点击屏幕上的任意位置来重新锁定光标。

要在玩家在这两种模式之间切换时做出响应,请使用 onChange 在……上的函数 PointerLock 组件,参见 事件监听器.

玩家更改 realm 或岛屿

Decentraland 中的玩家存在于彼此分离的 领域和彼此分离的 岛屿 中。不同领域或岛屿中的玩家无法相互看见、互动或聊天,即使他们站在同一地块上也是如此。

每次玩家更改 realm 或岛屿时, onRealmChangedObservable 事件都会被调用。

此事件包含以下字段:

  • serverName: 字符串;catalyst 服务器名称。

  • room: 字符串;岛屿名。

  • displayName: 字符串;catalyst 服务器名称后接一个 - 以及岛屿名。例如 unicorn-x011.

  • domain: 字符串;所使用的 catalyst 服务器的 URL。

随着玩家在地图中移动,他们可能会切换岛屿,以便与此刻离他们最近的玩家分组。岛屿的边界也会动态调整,以便每个岛屿容纳一个可管理规模的人群。因此,即使玩家站着不动,随着其他人进入或离开周围场景,他们也可能被切换到另一个岛屿。

如果你的场景依赖于 第三方服务器 来实时同步玩家之间的变化,那么你可能只想在被分组到同一 realm+岛屿中的玩家之间共享数据,因此当玩家更换岛屿时,在第三方服务器中切换房间是一个好习惯。

加密函数

视频事件

当视频更改其播放状态时, onVideoEvent observable 会接收一个事件。

视频事件的输入包含以下属性:

  • videoClipId ( 字符串):更改状态的实体 ID。

  • componentId (字符串):更改状态的组件 ID。

  • currentOffset (数值):视频上 seek 属性的当前值。该值显示自视频原始起始点以来经过的秒数。 -1 。

  • totalVideoLength (数值 ):整个视频的长度(秒)。 -1 如果长度未知。

  • videoStatus:新的视频状态值,对应于 VideoTexture,其值取自 VideoStatus 枚举。该枚举可包含以下可能值:

  • VideoStatus.NONE = 0,

  • VideoStatus.ERROR = 1,

  • VideoStatus.LOADING = 2,

  • VideoStatus.READY = 3,

  • VideoStatus.PLAYING = 4,

  • VideoStatus.BUFFERING = 5

最后更新于