Usamos os seguintes sistemas para suportar tanto os sistemas de jogabilidade básicos quanto quaisquer metas dos requisitos principais de design.
UseManager
UseManager forneceu uma API simples para aplicar um objeto pego ao algo, como um conjunto de roupas em camadas sobre um manequim. A função principal para esta API é UseManager.AddUse (tags, item, distâ
Podemos remover o "use" com UseManager.RemoveUse, o que geralmente era útil quando uma missão era terminada ou um item específico era "utilizado". Além disso, podemos adicionar ou remover alvos com AddUseTargets e RemoveUseTargets.
Destaques
Qu
Este LocalScript utiliza uma nova função de motor Highlight que desenha um contorno de um Objetoe/ou
HighlightItemsFunc é usado para comunicar-se com outros sistemas de cliente. Por exemplo, EventManager usa-o com um comando Habilitar
Lore e ThoughtBubbles
Lore e ThoughtBubbles são 2 sistemas semelhantes. Lore usa um ScreenGui como um contêiner de UI na t
Lore é implementado no LoreManger LocalScript . Quando clicado ou tocado, ele dispara um raycast usando uma função de ajuda utils.RaycastAlongPointingDir ', e
Nota que usamos Camera.ViewportPointToRay ou Camera.ScreenPointToRay para construir o raio, dependendo se ele for chamado de um não toque ou toque. Os coordenados estão em alguns sistemas de coordenadas diferentes. Para o mouse, obtemos del
Bolhas de Pensamento são geralmente semelhantes, usando um raycast para ver se uma malha ou seus pais têm uma bolha de pensamento tag. Ele também usa o atributo ThoughtText para texto e uma bolha de pensamento tag para apontar para um objeto de posição usado para posicionar a interface no mundo. Bubbles de pensamento que usam o mesmo posicional de objeto, mas têm diferentes textos têm diferentes cooldowns.
Caixas Especiais
Lore tem alguns casos especiais, sendo um dos quais é o corrupted seals. Gerenciador de Conhecimento também lida com um caso especial com a exibição de uma pequena cutscene quando clicar em portas desativadas que estão bloqueadas até que o jogador pegue o selo da sala.
Item Indicador
Queremos mostrar diferentes ícones no centro da tela quando o jogador está olhando para certos itens de interesse. O script de cliente OnItemindicator faz um raycast ao longo da câmera Class.CFrame.LookVector e analisa os resultados. Com base nos resultados, ele configura uma imagem no OnItemIndicator2 ScreenGui.
Quando nenhum item de interesse é atingido, o ícone padrão é um pequeno ponto. Podemos definir qualquer ícone adicionando um atributo OnItemIndicator à uma malha específica, usando os nomes de onItemIndicatorImages , como Hand, Eye ou DoorCurrentlyLocked. O atributo é necessário apenas em casos raros e a maioria dos outros sistem
Tipos verificam alguns em uma ordem de prioridade. Depois da Sobrepor/substituirde OnItemIndicator, verificamos se é possível de agarrar ou um Drawer for the "hand" ícone através de either utils.CanGrabModel(model) ou utils.GetTaggedObjectUpHierarchy
highlightItemsFunc:Invoke({"GetType", curInst})
As tags Lore e ThoughtBubble são verificadas mais tarde ao verificar tags. Para as portas, temos 2 ícones diferentes: DoorCurrentlyClosed e DoorAlwaysLocked. 1> DoorManager1> define um atributo de verdadeiro ou falso 4>
Gerenciador de Portas
O Gerenciador de PortasLocalScript usa uma etiqueta de Porta e 2>Class.CollectionService2> para gerenciar a abertura e fechamento de portas. A porta tem gatilhos frontais e traseiros que conectamos com toque
Cada porta tem um sistema de estado simples, DoorState (Fechada, Abertura, Abertura, Fechando), com tweens usados para transições. Nós podemos ativar ou desativar a capacidade de uma porta para abrir ou fechar a partir de sistemas externos ao chamar DoorManager.EnableDoor, que define um atributo DoorEnabled.
MestreAnimador
O MasterAnimatorLocalScript descreve imagens animadas (atlas de textura), que us
Um objeto com um SurfaceGui animado teria um ModuleScript
Animações de Local
O LocalSpaceAnimationsLocalScript usa uma tag LocalSpaceRotation para girar a maioria dos objetos “cosméticos” com uma velocidade de rotação e atraso especificados em torno do
Gerenciador de Luz de Cabeça
O Gerenciador de Lanterna de cabeça gerencia quando os usuários selecionam o Class.ImageButton no ecrã para ativar o spotlight no top
Gerenciador de assento
Não queremos que os jogadores se sentem automaticamente quando estão perto de um objeto em que eles podem sentar. Em vez disso, queremos
Gerenciador de Baús
O script DrawerManager usa uma etiqueta Drawer2 e CollectionService para lidar com cliques em armários para abrir ou fechar eles, e tocar qualquer áudio correspondente. A abertura e fechamento da ação é feita por definir a posição de alvo para um 1> Class.PrismaticConstraint1> .
Volume de Desligamento
Em algumas áreas da área de jogos principal, como os sparkles elétricos e a água perto do início da estrada que leva à casa, um jogador pode ter seu Humanoid.Health definido como 0 quando entrar em um volume com a etiqueta
PlayerMissionRespawn
O script PlayerMissionRespawn usa uma etiqueta RespawnVolume e CollectionService para lidar com os volumes que fazem os jogadores reaparecerem quando tocados. Nós colocamos esses volumes sob salas corrompidas, como muitas missões
Ao processar GameEvents.PlayerRespawn , o script pode usar RespawnPositions, se a configuração da missão fornecer. Se não, ele usa TeleportPositions para o local
Sistemas de Ajudante Pequenos
Gerenciador de Piano
O script PianoManager usa uma etiqueta Piano e CollectionService para adicionar 2> Class.ClickDetector|ClickDetectors2> e tocar um dos sons do piano quando clicado no teclado.
Suporte de Ritual
O salão onde os jogadores colocam selos tem uma contrapartida complicada que sofre alterações à medida que cada selo é colocado em sua localização definida. Por exemplo, dependendo do número de selos colocados, eventos específicos são jogados para ativar/desativar luzes e feixes, alterar a transparência
Gerenciador de Restaurável
Alguns objetos podem ser importantes para a jogabilidade, como selos, e não queríamos que eles fossem perdidos se um jogador cuspisse em algum lugar. Se um objeto tiver uma etiqueta Restorable, o script RestorableManager.StartTracking lembr
Portais
Em algumas missões, teletransportamos os jogadores de uma pequena distância dentro de uma missão, como respawning players que cai de uma plataforma girando. Para simplificar a configuração deste tipo de teletransporte, que chamamos de "Portals" no script, uma função de ajuda ProcessPortal em DemoUtilities</
P1.Touched:Connect(function(otherPart) utils.ProcessPortal(otherPart, P2) end)
ProcessPortal manipulações verificando que outra parte é um humano, teletransportando o jogador através de uma CFrame mudança de coordenada de alteração, e invocando uma pequena cutscene para ocultar a transição usando um Teleport_Jump evento em 0> 1> EventManager 1>.0> .
Scripts de Configuração
Temos vários scripts de configuração, definição de dados e comuns: Configuração de Demonstração . Definições de missões. Numeros para estados de jogo, eventos para comunicações entre cliente e servidor. Configurações Globais de Demo . Nós desenvolvemos em um local, mas liberamos (e teste de jogo) em outros. O script verifica o ID de lugar e habilita/desabilita várias funções de cheats e de diagnóstico. DemoUtilities . Várias funções de utilidade. Lidando com transformações. Configurando visibilidade, ancorado ou outras propriedades. Verificando um ponto em uma caixa. Encontrando objetos na hierarquia por nome "dotted". Gerenciando TempStorage (que pode ser usado para mover temporariamente modelos "em algum lugar longe" e levar de volta mais tarde). Clique em ajudadores de det AudioUtilities . Algumas funções para tocar sons pesados aleatórios de um configurar. GrabUtil . Funções de ajuda para agarrar.