像黑暗之外的演示一样,我们最早的一个决定是让游戏和故事尽可能多地在世界本身内部讲述。当您想要同时通过用户界面向玩家传达沟通进度和让他们感觉自己真正属于您构建的世界时,这可能是一个困难的过程。为了满足这些目标对我们的体验,我们将我们传达信息给玩家的方式拆解为四种技巧:
- 视觉提示 - 对象、图像或资产安排,可被动强化故事或向玩家提供线索,当它对世界有意义时。
- 传说 - 当玩家单击/点击房屋中的特定物品时,重要故事信息会显示在整个屏幕上 . 这个故事只对那些单击/点击对象的玩家可见。调调总是在调调和句法上具有信息性。
- 思想泡泡 - 当玩家单击/点击房子中的特定物品时,显示一个文本对话框“反应”靠近对象 .这个故事只对那些单击/点击对象的玩家可见。调调总是第一人称和观察的。
- 公告 - 当玩家单击/点击房屋中的损坏物品时,第三人称对话会在 每个玩家的屏幕上同时显示 .这个故事有时会将所有玩家转变为他们所在房间的损坏状态。
在本节中,我们将展示我们如何使用这些技巧和特定功能将玩家沉浸于我们的故事,同时仍然鼓励探索、沟通进度和保持游戏对个人玩家和多人游戏体验都亲密和公平。



视觉提示
视觉提示是强化故事和告诉玩家他们需要知道什么关于目标的重要工具 而不使用单词 。使用一组资产,例如涂白板、雕像和墙纸,我们就能被动地提供 Duvall Drive 主角的信息深度以及关于如何完成谜题而不需要包含侵入性的用户界面元素的指导。我们首先通过确定我们想要向玩家传达什么来开始这个过程,然后确定如何在我们的体验世界中传达这些内容。例如,我们希望玩家理解祖父在抵抗死亡的任务中有多执着,因此我们让他的房间一片狼藉,满是他的研究和一些潦草的想法。


我们的第一个规则是,如果我们想使用视觉提示来教授玩家一些东西,即使玩家不在场上,它也必须有存在的理由。如果我们放置了一个巨大的标志牌,上面有清晰的说明关于为谜题做什么,这看起来会在房屋内失去位置。然而,如果我们确立了一个可以消耗所有东西的祖父,包括他的卧室墙壁,那么使用橡皮板将他的计划叙述出来,以便玩家遵关注的话,就更可信得多。

我们的第二个规则是,我们不总需要告诉玩家该做什么或如何解决谜题,因为它们对环境有见解。例如,有时水池中掉落的电力线足以发出视觉信号,告诉玩家如果继续移动在那个方向,他们可能会受到电击的危险。

传说
除了使用视觉提示来被动引导玩家外,我们还选择在整个屏幕上显示家庭 重要故事信息 作为开始房间谜题的前奏,每当玩家单击或点击房屋中的特定物品时。为了引导玩家选择需要显示的知识对象,我们使用了新的突出视觉效果将特定对象与周围环境区分开来。这种效果可以让你用特定颜色来轮廓和/或重叠对象,以便它们与物体本身的形状相适应,并选择其他对象是否可以隐藏亮点,如果它们离相镜头更近。




我们最初使用了 Highlight 为玩家可以互动的每个对象,但视觉噪音太强烈,玩家不能清楚地知道要与什么互动以阅读传说。我们决定仅使用它来突出那些已损坏或危险的物品,这种视觉反馈允许玩家轻松驱动故事。

玩家单击了带有传说的对象后,我们需要一种方法来在屏幕顶部显示信息。我们决定使用 ScreenGui 作为我们屏幕上的 UI 容器,使用子 Frame 来控制其子 TextLabels 和 ImageLabels 的缩放和缩放。我们设置了 TextLabels 和 ImageLabels 属性的位置和比例,使它们在视觉上匹配,并且可以为不同的设备玩家使用来访问体验的设备扩展。

TextLabels 和 ImageLabels 影响各自文本和图像的视觉元素,包括颜色、透明度、尺寸和排序。对于 TextLabels 特别是,您可以调整它们的 TextLabel.TextScaled 和 TextLabel.RichText 属性来控制文本的布局和视觉风格。TextLabel.TextScaled 允许您将文本缩放到填充整个父级 UI 元素的空间,而TextLabel.RichText 允许您使用简单的标记标签来格式化文本的粗体、斜体、颜色或甚至不同字体。

我们知道玩家将从各种设备访问此体验,包括 PC、控制台和移动设备,他们需要能够单击或点击屏幕与体验互动。我们不想让屏幕上的按钮分散注意力,所以我们使整个屏幕的隐形返回按钮的大小为玩家可以单击或点击任何地方的传说覆盖来关闭内容并返回游戏的玩法。

思想泡泡
我们需要一种方法,让玩家的角色向玩家传达想法,例如提供额外的故事味道或强化他们需要做的事情。我们的解决方案是显示思维泡泡或 玩家角色的文本反应 ,每当玩家选择它们时,就靠近非知识对象。这个故事只向点击或轻按对象的玩家显示,且调调总是第一人称和观察的。

要创建思想泡泡,我们将一个 BillboardGui 与一个孩子 TextLabel 关联到非知识对象。这允许我们在对象附近的 3D 空间显示对话框,而不需要文本占用整个屏幕。与我们创建传说时的过程类似,我们使用了 TextLabel.RichText 属性来格式化文本并添加视觉效果,例如另一个异界生物打断玩家自己的思想。以下是用于制作下面图像的 RichText HTML 的示例。
"What is…this…<br/><stroke color="#dcc7ff" joins="miter" thickness="2" transparency="0.5"><font size="60"><font color="rgb(10,8,11)"><i>....hunger….void….pull…</i></font></font></stroke>

通过使用 TextLabels 而不是图像,我们保持了 Roblox 可以阅读的文本,我们可以自动本地化此内容并将其提供给更多玩家,而无需做任何事情!有关此过程的更多信息,请参阅 自动翻译。
公告
虽然我们希望玩家的角色对世界有反应,我们也希望世界本身对他们的存在做出反应。为了实现这个目标,我们包含了显示 在每个玩家的屏幕上一次 的公告或第三人称对话。与传说类似,我们使用了一个 ScreenGui 作为我们屏幕上的 UI 容器,包含一个子 TextLabel 。我们还使用了 TextLabel.RichText 属性来更改对话框的颜色、字体和大小,以帮助传达不同的“实体”与房屋里的玩家交谈。



通过使用 TextLabel.RichText 属性并在其中提供一些 HTML 命令来驱动更改,我们还允许在中文句期间进行更改!例如,以下富文本标记允许我们通过恶意实体的思想中断玩家角色的反应:
What is…this…<br/><stroke color="#dcc7ff" joins="miter" thickness="2" transparency="0.5"><font size="60"><font color="rgb(10,8,11)"><i>....hunger….void….pull…</i></font></font></stroke>

我们有几种这类公告,其中一部分是由玩家走进的隐形部件卷umen触发的,另一部分是由完成某些目标而触发的。为了避免数十个单独的 , 我们在演示中使用了一个单独的脚本, 允许我们为脚本将要添加到单个对象命名为 StoryNote 的文本提供文本。这个对象是一个单独的 ScreenGui ,包含一个子 TextLabel 。使用脚本,我们可以直接将我们想要的任何短语注入到单个 TextLabel 中,这使得我们更容易地进行更改,因为我们了解了如何和我们想要传达给玩家的内容!


