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

智能物品 - 高级

在你的场景中使用智能物品来增加交互性。

大多数智能项目都有一个基础模块,你可以在这里以简单方式只配置最常用的设置,但你可以向下滚动,越过 高级 标记,来自定义几乎关于该项目行为的任何内容。

下面的项目有一个 Transform 组件和一个基础模块,该模块只显示用于配置按钮的基本字段。但是如果你向下滚动,越过 高级 标记,你会找到所有可用的设置。



📔 注意:基础模块中的大多数设置也可在下方的组件中找到。在基础模块中所做的更改会反映到下方的组件中,反之亦然,除非某些情况下基础设置是下方多个设置的抽象。在这些情况下,将高级设置更改为基础模块不支持的值,会导致基础模块中的字段被标记为未定义。

高级配置

属性被分组到 组件。不同的智能项目可能具有不同的组件,这取决于它们的功能。

大多数项目的行为由以下内容控制:

  • 操作:Actions 组件定义了项目可以执行的操作。例如播放声音、播放动画、向上移动或变得不可见。

  • 触发器:Triggers 组件指定哪些事件会触发这些操作。例如当玩家点击项目、当玩家走入某个区域,或当场景首次加载时。

例如,在一个门智能项目中, 操作 组件包含“打开”和“关闭”操作。 触发器 该项目中的组件包含一个 点击时 触发器,当玩家点击门时会激活“打开”操作。

智能项目的触发器可以激活场景中任何智能项目上的操作,而不只是同一个智能项目上的操作。例如,一个按钮智能项目可以有一个 触发器 组件,它会激活定义在 操作 组件中的“向上移动”操作。

触发器也可以有条件地发生。例如,门智能项目包含两个 点击时 触发器在其 Triggers 组件中:一个在门关闭时打开门,另一个在门开启时关闭门。更多详情请参见 状态和条件逻辑.

项目之间的交互

要让项目彼此交互:

  • 一个项目需要在一个 操作 组件。

  • 另一个项目需要在 触发器 组件中拥有一个指向该操作的触发器。

例如,要让按钮打开门:

  1. 添加任意按钮智能项目,打开它的 触发器 组件。它有一个默认触发事件,会为按钮本身播放声音和动画。

  2. 点击 + 旁边的符号 已分配的操作,为同一个触发事件添加第三个操作。

  3. 在第一个下拉框中选择门对应的智能项目。

  4. 在第二个下拉框中,选择“打开”操作。



💡 提示:你也可以创建一个新的触发事件,只处理门的操作。每次点击按钮时,两个触发事件都会被调用。



任何项目都可以触发其他任何项目的任何操作,只要该操作已定义。请参见 触发器 了解更多触发操作的方法。

你可以使用 状态和条件逻辑 仅在满足条件时触发操作。该条件甚至可以检查第三个智能项目的状态。例如,只有当自定义的“电源发生器”智能项目的状态设置为“开”时,按钮才会打开门。

操作

该 操作 组件列出了该项目可以执行的操作。每个智能项目都包含一组预定义操作。你可以自定义现有操作或添加新的操作。可用的操作类型如下:

  • 播放动画:在该项目的 3D 模型中播放动画。请参见 关于播放动画

  • 停止动画:停止该项目的 3D 模型正在播放的所有动画。

  • 播放声音:在项目所在位置播放来自文件的声音。请参见 关于播放声音

  • 停止声音:停止来自该项目的所有声音播放。

  • 开始补间:在给定时间内逐渐改变位置、旋转或缩放。请参见 移动、旋转或缩放.

  • 设置可见性:使项目可见或不可见。

  • 附加到玩家:将该项目设置为玩家头像的子对象。例如,让它拿在手上或悬在头顶上方。

  • 从玩家分离:将项目从玩家头像上分离。

  • 打开链接:在浏览器标签页中打开指向外部网站的链接。打开前会询问玩家是否信任该域名。

📔 注意:此操作只能通过点击项目来触发,不能通过走入触发区域来触发。

  • 移动玩家:将玩家的位置更改为场景内的一组本地坐标。只能在同一场景内移动玩家。

  • 传送玩家:将玩家传送到 Decentraland 中的另一个位置。使用 传送模式 下拉框将他们发送到 到坐标 Genesis City 中另一个场景的坐标,或者 到世界,表示某个 World 的名称。玩家将出现在目标场景的出生点。

  • 播放表情动作:让玩家的头像执行默认头像动画之一(例如:挥手或鼓掌)。

  • 播放自定义表情动作:让玩家的头像执行来自已上传到场景文件的自定义动画。

  • 显示文本:在屏幕 UI 上显示文本,几秒后隐藏。适合提示、对话台词、通知等。

  • 隐藏文本:隐藏当前可能显示的任何 UI 文本。

  • 开始延迟:将同一项目的另一个操作延迟所需的若干秒。

  • 停止延迟:取消该项目上的所有延迟操作。

  • 开始循环:以给定间隔反复重放同一项目的某个操作。

  • 停止循环:取消该项目上的所有循环操作。

  • 播放视频:将视频作为材质在基础形状上播放。

  • 停止视频:停止当前播放的任何视频。

  • 播放音频流:播放音频流。

  • 停止音频流:停止当前正在播放的任何音频流。

  • 克隆:在指定位置复制一个项目。

  • 生成实体:在场景中创建一个项目的新副本,位置相对于执行该操作的项目。要生成的项目不需要先放置在场景中。请参见 关于生成实体.

  • 移除:从场景中删除一个项目。

  • 显示图片:在 UI 上显示图片,可能仅限一段时间。还可以包含标题说明。

  • 隐藏图片:隐藏当前通过“显示图片”操作在 UI 中显示的任何图片。

  • 伤害:减少附近任何生命条的生命值。 层 属性可决定它是否只作用于玩家身上的生命条,还是作用于其他项目。

  • 将玩家移动到这里:将玩家的位置更改为此项目的位置。

  • 放置到玩家身上:将项目的位置更改为玩家的位置。

  • 按玩家方向旋转:将项目的旋转更改为玩家的旋转。

  • 放置到摄像机:将项目的位置更改为摄像机的位置。

  • 按摄像机方向旋转:将项目的旋转更改为摄像机的旋转。

  • 设置位置:将项目的位置更改为特定位置。它可以是绝对位置,也可以相对于当前位置。

  • 设置旋转:将项目的旋转更改为特定旋转。它可以是绝对旋转,也可以相对于当前旋转。

  • 设置缩放:将项目的缩放更改为特定缩放。它可以是绝对缩放,也可以相对于当前缩放。

  • 跟随玩家:开始朝玩家位置方向移动并转向。它会忽略沿途的任何障碍物。你可以设置速度,并让它只在特定轴上移动。最小距离决定它会靠近玩家到什么程度。

  • 停止跟随玩家:停止“跟随玩家”操作。

  • 随机操作:每次调用随机操作时,这里列出的其中一个操作都会以相同概率随机执行。你可以列出属于该项目的任何操作。

  • 批量操作:每次调用批量操作时,这里列出的所有操作都会同时执行。你可以列出属于该项目的任何操作。

  • 治疗玩家:恢复玩家生命条的生命值。

  • 玩家面向项目:让玩家头像转身面向该项目。

  • 冻结玩家:阻止玩家移动、跳跃或做表情动作。

  • 解除玩家冻结:在“冻结玩家”操作后恢复玩家的移动能力。

  • 灯光开启:打开该项目的 光源 组件。

  • 灯光关闭:关闭该项目的 光源 组件。

  • 修改灯光:更改该项目的 光源 组件的属性,例如颜色或强度。

  • 选择摄像机:将玩家视角切换到 虚拟摄像机,可以是此项目上的,也可以是另一个实体上的。

  • 更改文本:更改带有 文本形状 组件的项目文本。还可以更改字体大小和颜色。

  • 停止补间:停止该项目当前正在进行的任何补间运动。

  • 滑动纹理:让项目材质上的纹理持续朝给定方向滑动,用于流水或传送带等效果。

  • 更改碰撞:启用或禁用该项目的碰撞体,既用于物理,也用于指针事件。

  • 更改天空盒:将场景的天空盒更改为固定的一天时间,以距午夜的秒数表示。

  • 重置天空盒:将场景的天空盒恢复为默认设置。

  • 记录到控制台:将消息输出到控制台,在开发场景时有助于调试。

  • 删除:从场景中移除该项目及其所有子对象。

参见 状态和条件逻辑 以了解其他与逻辑条件相关的操作,例如 设置状态 以及计数器操作。

该 操作 组件定义了可能的操作,但除非被触发,否则这些操作在场景中不会产生任何作用。操作由 触发器激活,可以来自同一个智能项目,也可以来自不同的智能项目。

要为项目添加新操作,请点击 添加新操作 按钮,位于 Action 组件底部。然后为该操作命名,选择类型,并填写该操作类型所需的任何附加字段。



触发器

该 触发器 组件定义了触发事件,当某个事件发生时,它们会激活操作。存在以下类型的触发事件:

  • 点击时:当玩家点击项目时。请参见 关于点击触发器

  • 在输入操作时:当玩家在指向该项目时按下输入按钮。

  • 全局点击时:当玩家在任意位置点击指针时,无需指向该项目。

  • 全局主操作时:当玩家在任意位置按下主按钮(E)时。

  • 全局次操作时:当玩家在任意位置按下次按钮(F)时。

  • 玩家进入区域:当玩家进入某个区域时。请参见 触发区域

  • 玩家离开区域:当玩家离开某个区域时。请参见 触发区域

  • 生成时:当场景开始时,或项目在场景中生成时。请参见 生成时触发

  • 延迟结束时:当一个 开始延迟 项目上的操作完成倒计时后。

  • 循环时:在每次 开始循环 项目上的操作迭代时。

  • 克隆时:当项目通过 克隆 操作被克隆时,新副本会触发此触发器。

  • 点击图片时:当玩家点击由 显示图片 操作显示的图片时。

  • 受伤害时:当项目受到来自 伤害 操作显示的图片时。

  • 玩家被治疗时:当玩家被一个 治疗玩家 操作显示的图片时。

  • 每个 Tick 时:在场景的每个 tick 中,每帧一次。请谨慎使用,因为由它触发的操作会非常频繁地运行。

参见 状态和条件逻辑 以了解其他与逻辑条件相关的触发器,例如 状态更改时, 计数器更改时 和 补间结束时.

要添加新触发器,请点击 添加新触发事件 ,位于 Trigger 组件底部。然后选择触发器类型、要激活的实体以及该实体中的一个操作。



📔 注意:需要在 操作 实体的组件中定义一个操作,才能触发它。触发器只能影响拥有 Actions 组件的实体。

关于播放动画

使用类型为 播放动画 的操作在智能项目的 3D 模型上运行动画。该动画需要已经作为 3D 模型文件的一部分存在。 选择动画 下拉框会显示 3D 模型中所有可用动画的列表。

该 播放模式 字段可让你选择动画是只播放一次,还是持续循环。



一旦创建了该操作,你就可以通过 触发器 同一项目或任何其他项目的组件来激活它。

使用 停止动画 操作,用于停止该项目的所有动画,包括循环和非循环的。

💡 提示:要轻松检查 3D 模型的内容,查看它包含哪些动画以及它们的效果,一个不错的工具是 Babylon Sandbox。只需将 3D 模型文件拖到窗口中即可。底部应该会出现一个包含其动画列表的下拉框。

要了解有关动画的更多信息,以及如何将它们作为 3D 模型的一部分创建,请参见 动画.

关于播放声音

使用类型为 播放声音 来播放声音文件。只要已导入场景项目,你就可以播放任何声音文件。声音具有空间位置,会从项目所在位置发出,这意味着玩家越靠近,声音越大。

💡 提示:你不必手动输入声音文件路径,可以将其拖入 路径 字段中,来源于场景编辑器底部的文件导航菜单。

使用 播放模式 字段可选择声音是播放一次还是持续循环。



一旦创建了该操作,你就可以通过 触发器 同一项目或任何其他项目的组件来激活它。

使用 停止声音 操作,用于停止该项目的所有声音,包括循环和非循环的。这也会停止来自 AudioSource 组件。

要让项目始终播放循环声音,例如环境音效或音乐,使用 AudioSource 组件会更容易,而不是使用 Actions 和 Triggers。该组件只需要你提供文件路径,并勾选 开始播放 和 循环.



📔 注意:一个智能项目一次只能播放一种声音。调用第二个声音会中断当前正在播放的其他声音。这也适用于 AudioSource 组件中的声音。如果你需要两种声音同时播放,可以考虑在同一位置添加一个不可见实体来承载一个 播放声音 操作显示的图片时。

参见 声音 ,以了解更多关于在 Decentraland 中播放声音的信息。

移动、旋转或缩放

使用一个 开始补间 操作来更改 位置, 缩放,或 旋转,在一段时间内更改该项目。所有 开始补间 操作都从项目的初始状态开始,并在一段时间内变为结束状态。

位置补间可以是相对的或绝对的。绝对位置补间会将项目移动到相对于场景的固定位置。项目会从当前位置移动到该位置;如果它已经在那里,看起来就不会移动。相对位置补间会将项目从当前位置移动一定距离,例如相对位置为 1, 0, 0 会让项目沿着当前朝向向前移动 1 米。如果你第二次运行补间操作,项目将再向前移动一米。

旋转补间也可以是相对的或绝对的。相对旋转会叠加到项目当前的旋转上。绝对旋转补间会让项目面向场景中的特定方向。

使用 持续时间 字段用于设置整个移动应花费多长时间,以秒为单位。请注意,滑块最大到 100 秒,但如果需要,你也可以手动输入更大的数字。



一旦创建了该操作,你就可以通过 触发器 同一项目或任何其他项目的组件来激活它。

补间可以遵循不同的 曲线类型 ,它们会影响随时间变化的速度。 线性 曲线(默认)表示变化速度从头到尾保持恒定。这里有很多可选项,它们会根据开始和/或结束是缓慢起步以及缓慢程度来绘制不同形状的曲线。 easeinexpo 曲线开始时慢,结束时快,速度呈指数增长;相反, easeoutexpo 曲线开始时快,结束时慢。



💡 提示:尝试不同的运动曲线。差异通常很微妙,但我们会下意识地从事物的运动方式中解读信息,例如重量、摩擦,甚至性格。

使用 补间结束时 在 触发器 组件中的触发事件,在补间结束后激活一个操作。使用 状态和条件逻辑 来描述浮动平台的循环路径,使其不断在两个位置之间移动。

当项目执行补间时,这会影响项目的方方面面。例如,如果它更改缩放,那么它会同时更改其可见 3D 模型的缩放,以及不可见碰撞体几何、文本大小等。如果项目有任何子对象(嵌套在左侧实体树中),这些子实体也会受到补间影响。

📔 注意:每个实体一次只能执行一个补间。例如,你不能让一个项目同时横向移动并旋转。作为变通方案,你可以使用带父子关系的实体。例如,你可以让一个不可见的父实体横向移动,而一个可见的子实体旋转。

关于生成实体

使用一个 生成实体 操作,在运行时在场景中创建一个项目的新副本。与 克隆 操作不同,你生成的项目不需要先放置在场景中。

使项目可被生成

在项目可以被生成之前,它必须存在于你项目的文件中。要在不把它放置到场景中的情况下添加项目:

  1. 在 资产 面板中,在目录中或在你的 自定义物品.

  2. 右键点击该项目并选择 添加到文件系统.

这会将该项目复制到你的项目中,以便之后可以生成。它不会向场景中添加任何可见内容。然后该项目会出现在 源 任意项的下拉菜单 生成实体 操作显示的图片时。

配置该动作

一个 生成实体 动作有两个字段:

  • 源:要生成的项目。从已添加到项目文件中的项目中选择。

  • 位置:新副本出现的 X、Y 和 Z 坐标,相对于执行该动作的项目。

如果你生成的项目本身就是智能项目,那么每个生成的副本都会独立保留各自的动作和触发器。

💡 提示:若要改为通过代码生成项目,请参见 复合体。添加到项目文件中的项目会以复合体形式存储,这是 SDK 的 spawn 函数使用的相同格式。

关于点击触发器

要通过点击某个项目来触发动作,请创建一个 点击时 触发器。每当玩家点击该实体时,动作都会被激活。



参见 让任意项目变为智能项目 了解更多详情。

📔 注意:使用自定义 3D 模型时,模型必须具有不可见的碰撞体几何体,才能被点击。参见 碰撞体.

作为替代方案,你可以配置该 GLTF 项目的 可见层 的碰撞设置为 指针.

另一种替代方法是添加一个 点击区域 智能项目,绘制一个与您想点击的项目重叠的立方体。点击区域智能项目是一个 不可见项目.

生成时触发

类型为 生成时 的触发器会在场景加载时激活动作。动作不会等待玩家与项目交互,而是会立即运行。

例如,可用它让平台持续移动。使用一个 生成时 触发器来激活动画补间动作。然后使用 状态更改时 触发器让它在两个或更多位置之间持续移动。



多人游戏

所有智能项目默认都是多人同步的。参见 智能项目 - 基础 了解更多详情。

你可以更改或微调此多人同步行为,使其仅同步项目的某些组件。

在项目的 多人游戏 组件中,勾选你想要共享的组件。

例如,门会共享其 动画器 这样所有人都能看到开门动画;其 AudioSource 这样所有人都能听到声音;以及其 状态 这样所有人都能跟踪它当前是打开还是关闭。门不会共享其 可见性 组件,因为门通常始终可见。如果你包含了触发其显示/隐藏的动作,也许还应该勾选此组件,以便在所有玩家之间同步更改。

不可见项目

某些项目并不打算让玩家看到,但在编辑场景时会显示出来,以便更容易管理。这种情况适用于诸如 环境音, 触发区域, 点击区域等。

在高级模式下,这些项目具有一个 可见性 组件设置为不可见。此组件不会影响场景编辑器中项目的可见性,但任何设置为不可见的项目在预览运行时都不会被玩家看到。

另请参阅

最后更新于