어둠 너머 데모와 마찬가지로, 우리의 가장 일찍 내린 결정 중 하나는 게임플레이와 스토리를 세계 자체 내에서 직접적으로 전달하는 것이었습니다.플레이어에게 사용자 인터페이스를 통해 통신 진행률을 균형 잡히게 하고 동시에 그들이 실제로 만든 세계에 있는 것처럼 느끼게 하려는 경우 이는 어려운 과정일 수 있습니다.경험에 대한 이러한 목표를 달성하기 위해 우리는 플레이어에게 정보를 전달하는 방법을 4가지 기술로 분해했습니다.
- 시각적 신호 - 세계에 의미가 있을 때 플레이어에게 힌트를 주거나 스토리를 강화하는 개체, 이미지 또는 자산 배열
- 로어 - 플레이어가 집에서 특정 항목을 클릭하거나 탭하면 중요한 스토리 정보가 전체 화면에 표시됩니다 .이 서사는 개체를 클릭하거나 탭한 플레이어에게만 표시됩니다.톤은 항상 톤과 어휘에서 정보적입니다.
- 생각 거품 - 플레이어가 집에서 특정 항목을 클릭하거나 탭하면, 텍스트 대화 "반응"이 개체 근처에 표시됩니다 .이 서사는 개체를 클릭하거나 탭한 플레이어에게만 표시됩니다.톤은 항상 1인칭이고 관찰적입니다.
- 공지 - 플레이어가 집에서 손상된 아이템을 클릭하거나 탭하면 3인칭 대화가 한 번에 모든 플레이어의 화면에 표시됩니다 .이 서사는 때때로 모든 플레이어를 그들이 있는 방의 손상된 상태로 전환합니다.
이 섹션에서는 이러한 기술과 특정 기능을 사용하여 플레이어를 우리 스토리에 몰입시키는 방법과 여전히 탐험을 장려하고 진행 상황을 전달하며 게임플레이를 개인 플레이어와 멀티플레이어 경험 모두에서 공정하게 유지하는 방법을 보여 줄 것입니다.



시각적 신호
시각적 요소는 나레이션을 강화하고 플레이어에게 목표에 대해 알아야 할 사항을 말하지 않고도 플레이어에게 필요한 도구입니다 단어를 사용하지 않고 .칠판, 동상 및 벽지와 같은 자산 배열을 사용하여 Duvall Drive의 주요 캐릭터에 대한 정보 깊이와 침략적인 UI 요소를 포함하지 않고 퍼즐을 완료하는 방법에 대한 지침을 수동으로 제공할 수 있었습니다.우리는 먼저 플레이어에게 전달하고 싶은 것을 파악한 다음 경험의 세계 내에서 그것을 전달하는 것이 어떻게 의미가 있을지 고려하여 이 과정을 시작했습니다.예를 들어, 우리는 플레이어들이 할아버지가 죽음을 거부하는 임무에서 얼마나 집착했는지 이해하기를 원했기 때문에, 그의 방을 혼란스럽게 하여 많은 연구와 그의 흐릿한 생각을 가진 몇 개의 벽으로 남겼습니다.


첫 번째 규칙은 플레이어에게 무언가를 가르치기 위해 시각적 신호를 사용하려는 경우, 플레이어가 존재하지 않더라도 존재할 이유가 있어야 한다는 것이었습니다.퍼즐에 대해 명확한 지시를 포함하는 거대한 표지판을 배치하면 집 내부에서 어색해 보일 것입니다.그러나 그의 침실 벽을 포함하여 모든 것에 그림을 그리는 할아버지를 설정하면 플레이어가 팔로우수 있도록 그의 계획이 적힌 칠판을 가지는 것이 훨씬 더 신뢰할 수 있습니다.

두 번째 규칙은 플레이어에게 항상 무엇을 하거나 퍼즐을 해결하는 방법을 말할 필요가 없다는 것입니다. 그들은 환경에 통찰력이 있기 때문입니다.예를 들어, 수영장의 물에 있는 떨어진 전력선이 때로는 플레이어가 그 방향으로 계속 이동하면 전기화될 위험이 있음을 전달하는 시각적 신호로 충분합니다.

로어
시각적 힌트를 사용하여 플레이어를 유도하는 것 외에도, 플레이어가 집의 특정 항목을 클릭하거나 탭할 때마다 방의 퍼즐을 시작하기 전에 가족에 대한 중요한 스토리 정보를 전체 화면에 표시하기로 선택했습니다.로어가 표시되려면 플레이어가 선택해야 하는 개체에 대해 안내하기 위해, 새로운 하이라이트 시각 효과를 사용하여 특정 개체를 주변 환경과 구별했습니다.이 효과를 사용하면 개체 자체의 모양에 맞는 특정 색상으로 개체를 개요화하고/또는 오버레이하고, 다른 개체가 카메라에 가까이 있는 경우 하이라이트를 숨길 수 있는지 선택할 수 있습니다.




처음에는 플레이어가 상호작용할 수 있는 모든 개체에 Highlight를 사용했지만, 시각적 소음이 압도적이었고 플레이어는 로어를 읽기 위해 상호작용해야 할 항목을 명확하게 알지 못했습니다.손상되거나 위험한 항목만 강조하기 위해 사용하기로 결정했으며, 이 시각적 피드백을 통해 플레이어가 쉽게 스토리를 진행할 수 있었습니다.

플레이어가 로어와 함께 개체를 클릭한 후, 화면 위에 정보를 표시할 방법이 필요했습니다.우리는 화면 UI 컨테이너로 ScreenGui 를 사용하여 자녀의 크기 조정과 크기 조정을 제어하는 아이 Frame 및 아이 TextLabels 및 아이 ImageLabels 의 크기 조정을 제어하기 위해 오버레이를 만들기로 결정했습니다.우리는 TextLabels 및 ImageLabels 속성의 위치와 크기를 설정하여 시각적으로 함께 맞추고 경험에 액세스하는 데 사용되는 다양한 장치에 크기가 확장됩니다.

TextLabels 및 ImageLabels 는 각각의 텍스트와 이미지의 시각적 요소, 색상, 투명도, 크기 및 배열에 영향을 줍니다.특히 TextLabels 에 대해, 텍스트의 레이아웃과 시각적 스타일링을 제어하기 위해 TextLabel.TextScaled 및 TextLabel.RichText 속성을 조정할 수 있습니다.TextLabel.TextScaled 는 전체 부모 UI 요소의 공간을 채우기 위해 텍스트를 확장할 수 있고, TextLabel.RichText 는 대/소문자, 색상 또는 심지어 다른 서체로 텍스트 섹션을 스타일링하기 위한 간단한 마크업 태그를 사용할 수 있습니다.

플레이어가 PC, 콘솔 및 모바일 장치를 포함한 다양한 장치에서 이 경험에 액세스할 것이고, 화면을 클릭하거나 탭하여 경험과 상호작용할 수 있어야 한다는 것을 알고 있었습니다.화면에 버튼이 너무 많아 스토리에서 방해되지 않으려고 전체 화면 크기의 투명한 뒤로 버튼을 만들어 플레이어가 콘텐츠를 클릭하거나 탭하여 게임 플레이돌아갈 수 있도록 했습니다.

생각 거품
플레이어의 캐릭터가 플레이어에게 아이디어를 전달할 수 있는 방법이 필요했습니다(추가 스토리 맛을 제공하거나 수행해야 할 일을 강화하는 등).우리의 솔루션은 플레이어가 선택할 때마다 비로어 개체 근처에 생각 거품 또는 플레이어의 캐릭터에서 텍스트 반응을 표시하는 것이었습니다.이 서사는 개체를 클릭하거나 탭한 플레이어에게만 표시되며 톤은 항상 1인칭 및 관찰 중심입니다.

생각 거품을 생성하려면 비로어 개체에 자식 BillboardGui 을 사용하여 TextLabel 를 부모로 지정했습니다.이를 통해 텍스트가 전체 화면을 차지하지 않고 개체 근처의 3D 공간에 대화를 표시할 수 있었습니다.전설을 만드는 과정과 비슷하게, 텍스트를 스타일링하고 플레이어의 생각을 방해하는 다른 이계의 존재와 같은 시각적 효과를 추가하기 위해 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>

이미지 대신 TextLabels을 사용하여 Roblox에서 텍스트를 읽을 수 있도록 유지하고, 아무것도 수행할 필요 없이 이 콘텐츠를 자동으로 지역화하고 더 많은 플레이어에게 액세스할 수 있었습니다! 이 프로세스에 대한 자세한 정보는 자동 번역을 참조하십시오.
공지 사항
플레이어의 캐릭터가 세계에 반응하길 원했지만, 세계 자체도 그들의 존재에 반응하길 원했습니다.이 목표를 달성하기 위해, 한 번에 모든 플레이어의 화면에 를 표시하는 공지 또는 세 번째 사람 대화를 포함했습니다 .로어와 비슷하게, 우리는 자식 ScreenGui 을 사용하여 화면 UI 컨테이너로 TextLabel 를 사용하여 공지를 만들었습니다.또한 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>

플레이어가 걸어 들어간 투명한 부품 볼륨에 의해 트리거되거나 특정 목표를 완료하여 이러한 유형의 공지가 여러 번 있었습니다.수십 개의 개별 를 피하기 위해 우리는 데모에서 별도의 스크립트를 사용하여 스크립트가 추가할 단일 개체에 텍스트를 제공할 수 있도록 했으며, 이 텍스트는 우리의 StoryNote 폴더에서 명명한 단일 개체에 추가할 수 있었습니다.이 개체는 자식 ScreenGui 이 있는 단일 TextLabel 였습니다.스크립팅을 사용하여 원하는 모든 구를 직접 TextLabel 에 삽입할 수 있었으므로, 플레이어에게 전달하려는 방법과 내용을 파악하여 변경하는 것이 훨씬 쉬워졌습니다!


