像是 Beyond the Dark 演示,我們最早的決定之一就是讓遊戲和故事在世界本身內以最多的方式死亡。當您想要平衡兩者通過使用者介面向玩家傳達通訊進度和讓他們感覺自己真正在世界中時,這可能會是一個困難的過程。為了符合這些目標對我們的體驗,我們將我們傳達資訊給玩家的方式拆解為四種技巧:
- 視覺提示 - 對象、圖像或資產安排,可被動強化故事或向玩家提供線索,當它對世界有意義時。
- 傳說 - 當玩家單擊/點擊房屋中的特定項目時,重要故事信息會顯示在整個畫面上。這個故事只對點擊/觸碰對物件的玩家可見。調調總是在調調和句法上具有資訊性。
- 思想泡泡 - 當玩家在房屋中單擊/點擊特定項目時,會顯示一個文字對話框「反應」 靠近對象 。這個故事只對點擊/觸碰對物件的玩家可見。調調總是第一人稱和觀察的。
- 公告 - 當玩家在房屋中點擊/點擊腐爛的物品時,第三人稱對話會在 每個玩家的屏幕上同時顯示 。這個故事有時會將所有玩家切換到他們所在房間的損壞狀態。
在這一節中,我們將展示我們如何使用這些技巧和特定功能將玩家沉浸在我們的故事中,同時仍然鼓勵探索、傳達進度並保持遊戲對個人玩家和多人遊戲體驗的公平。



視覺提示
視覺提示是強化故事並告訴玩家他們需要知道什麼關於目標的重要工具 不使用文字 。使用各種資產,例如繪圖板、雕像和牆紙,我們就能被動地提供 Duvall Drive 主角的資訊深度以及如何完成謎題而不需要包含侵入性的使用者介面元素。我們開始這個過程首先想出我們想要傳達給玩家的內容,然後如何在我們體驗世界中傳達這些內容。例如,我們希望玩家理解祖父在抵抗死亡的任務中有多執著,因此我們讓他的房間混亂,並將他的研究和一些潦草的想法寫在幾個牆上。


我們的第一個規則是,如果我們想使用視覺提示來教導玩家一些東西,即使玩家不在場上,它也必須有存在的理由。如果我們放置一個巨大的標誌,上面有清晰的指示如何處理謎題,這看起來會在房屋內失去位置。然而,如果我們建立了一個會消耗所有東西的祖父,包括他的臥室牆壁,那麼將他的計畫寫在黑板上,讓玩家跟追蹤的話,就更可信了。

我們的第二個規則是,我們不總需要告訴玩家該做什麼或如何解決謎題,因為它們對環境有見解。例如,有時候水池中掉落的電力線就足以傳達玩家可能會因繼續移動在那個方向而危險被電擊的視覺線索。

傳說
除了使用視覺提示來被動引導玩家外,我們還選擇在整個屏幕上顯示家庭的重要故事信息 ,作為開始房間謎題的前兆,每當玩家點擊或點擊特定房屋中的特定物品,就會顯示 。為了幫助玩家選擇需要顯示的傳說物品,我們使用了新的突出視覺效果來將特定物品與環境區分開來。這個效果可以讓你繪製和/或覆蓋物件以特定顏色,該顏色與物件本身的形狀相配,並選擇其他物件是否可以隱藏亮點,如果它們離相攝影機更近。




我們最初使用 Highlight 為玩家可以互動的每個對象,但視覺噪音太強烈,玩家不能清楚地知道要與什麼互動以讀取傳說。我們決定只使用它來突出已損壞或危險的項目,這種視覺反饋讓玩家輕鬆驅動故事前進。

玩家點擊含有故事的對象後,我們需要一種方法來在畫面上顯示資訊。我們決定使用 ScreenGui 作為我們在屏幕上的 UI 容器,並使用子 Frame 來控制其子女的縮放和縮放 TextLabels 和 ImageLabels 。我們設置了 TextLabels 和 ImageLabels 屬性的位置和比例,使它們在視覺上匹配,並且會適應不同裝置玩家使用來存取體驗的大小。

TextLabels 和 ImageLabels 會影響其各自文字和圖像的視覺元素,包括顏色、透明度、尺寸和排列。對於 TextLabels 特別是,您可以調整它們的 TextLabel.TextScaled 和 TextLabel.RichText 屬性來控制文本的布局和視覺風格。TextLabel.TextScaled 允許您將文字縮放以填滿整個父UI元素的空間,而TextLabel.RichText 允許您使用簡單的標記標籤來格式化文字的部分,以粗體、斜體、顏色或甚至不同的字體來顯示。

我們知道玩家將從各種裝置存取此體驗,包括電腦、遊戲主機和移動裝置,他們需要能夠單擊或點擊螢幕以與體驗互動。我們不想屏幕上有一堆按鈕分散注意力,所以我們使整個屏幕的隱形返回按鈕的大小,玩家可以單擊或點擊任何地方的傳說過渡以關閉內容並返回遊玩。

思想泡泡
我們需要一種方法讓玩家角色與玩家溝通想法,例如提供額外的故事風味或強化他們需要做的事情。我們的解決方案是顯示思維泡泡,或 玩家角色的文字反應 ,靠近非傳說物體,每當玩家選擇它們。這個故事只會顯示給點擊或點擊物件的玩家,且調調總是第一人稱和觀察的。

要創建思維泡泡,我們將一個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>

我們曾經有過多種這類公告,其中一部分是由玩家進入的隱形零件體積或完成特定目標觸發的,或者是完成特定目標。為了避免數十個單獨的 ScreenGuis ,我們在演示中使用了一個獨立的腳本,允許我們在我們的 **** 文件夾中提供添加到單一對象的文字,我們命名為PlayerGui ,我們命名為 StoryNote 。這個對象是單一 ScreenGui 與兒子 TextLabel 。使用指令碼化,我們可以直接將我們想要的任何片段注入到單個 TextLabel 中,這使得我們更容易地進行更改,因為我們知道如何和玩家想要溝通的內容!


