Nous avons utilisé les systèmes suivants pour prendre en charge les systèmes de jeu fondamentaux ainsi que les objectifs des exigences principales de conception .
Utiliser Manager
UseManager fourni une API simple pour appliquer un objet attrapé sur quelque chose, comme un vêtement dépareillé sur un mannequin. La fonction principale pour cette API est UseManager.AddUse (des balises, des cibles, de la distance, sur
Nous pourrions supprimer le « utiliser » avec UseManager.RemoveUse, qui était habituellement utile lorsqu'une mission était terminée ou qu'un élément spécifique a été « utilisé ». En outre, nous pouvions ajouter ou supprimer des cibles avec AddUseTargets et RemoveUseTargets.
Highlights
Lors
Ce LocalScript utilise une nouvelle fonctionnalité moteur Highlight qui dessine un contour d'un objet et
HighlightItemsFunc est utilisé pour communiquer avec d'autres systèmes clients. Par exemple, EventManager l'utilise avec un commande Enabled pour
Connaissances et pensées
Lore and ThoughtBubbles are 2 similar systems. Lore uses a ScreenGui as an on-screen UI container with a child
La connaissance est implémentée dans le LoreManger LocalScript . Lorsqu'il est cliqué ou touché, il lance un raycast à l'aide d'une fonction d'objet utils.Raycast
Remarquez que nous utilisons Camera.ViewportPointToRay ou Camera.ScreenPointToRay pour construire le rayon, en fonction de si c'est appelé à partir d'un non-触 ou d'un touch. Les coordonnées sont dans des systèmes de coordonnées légèrement différents
Les bulles de pensée sont globalement similaires, en utilisant un raycast pour vérifier si un maillage ou ses parents ont une balise Bulles de pensée . Il utilise également l'attribut ThoughtText pour le texte, et un tag Bulles de pensée pour indiquer un objet de placement utilisé pour positionner l'interface utilisateur dans le monde. Les bulles de pensée qui utilisent le même objet positional mais ont différents textes ont différents cooldowns.
Cas spéciaux
La connaissance a quelques cas spéciaux, l'un d'entre eux étant les selles cor Gestionnaire du savoir gère également un cas spécial avec la présentation d'une petite scène lorsqu'il est cliqué sur des portes désactivées qui sont verrouillées jusqu'à ce que le joueur prenne le sceau de la salle.
Sur l'indicateur d'objet
Nous voulons montrer différents icônes au centre de l'écran lorsque le joueur regarde certains éléments d'intérêt. Le script client OnItemindicator fait un raycast le long de la caméra Class.CFrame.LookVector et analyse les résultats. En fonction des résultats, il définit une image dans le OnItemIndicator2 ScreenGui.
Lorsque aucun élément d'intérêt n'est touché, l'icône par défaut est un petit point. Nous pouvons définir n'importe quelle icône en ajoutant une valeur OnItemIndicator à un maillage spécifique, en utilisant le nom de onItemIndicatorImages, comme Hand, Eye ou DoorCurrentlyLocked. L'attribut n'est nécessaire que dans des cas r
Tapez des choses dans un ordre de priorité. Après l'覆盖 de OnItemIndicator par utils.CanGrabModel(model) ou utils.GetTaggedObjectUpHierarchy("Drawer2", model), nous vérifions si c'est un statutou un tiroir pour l'icô
highlightItemsFunc:Invoke({"GetType", curInst})
Les tags Lore et ThoughtBubble sont vérifiés plus tard en vérifiant les tags. Pour les portes, nous avons 2 icônes différents : DoorCurrentlyClosed et DoorAlwaysLocked . DoorManager définit un attrribut vrai ou faux pour les portes
Gestionnaire de portes
Le DoorManagerLocalScript utilise une balise de porte et 1> Class.CollectionService1> pour gérer l'ouverture et la fermeture des portes. La porte a des déclencheurs de devant et de derrière que nous connectons avec le touch
Chaque porte a un système d'état simple, DoorState (fermé, ouvert, ouvert, fermé), avec des tweens utilisés pour les transition. Nous pouvons activer ou désactiver la capacité d'une porte à s'ouvrir ou à fermer à partir des systèmes externes en appelant DoorManager.EnableDoor, qui définit une attribut DoorEnabled.
Maître Animateur
Le MasterAnimatorLocalScript joue des images animées (atlas de texture), que nous avons utilis
Un objet avec un animé SurfaceGui aurait un Animator ModuleScript , avec
Animations locales
Les animations localesLocalScript utilisent une étiquette localespace pour faire pivoter la plupart des objets « cosmétiques » avec une vitesse de rotation et un décalage donnés autour
Gestionnaire de lampes de tête
Le Class.LocalScript gère les commandes lorsque les utilisateurs sélectionnent le Class.ImageButton sur l'écran pour activer le projecteur au-dessus de leur tête, tir
Gestionnaire de sièges
Nous ne voulons pas que les joueurs se sentent automatiquement lorsqu'ils sont près d'un objet sur lequel ils peuvent se asseoir. Au
Gestionnaire de tiroirs
Le script DrawerManager utilise une étiquette Drawer2 et CollectionService pour gérer le clic sur les tiroirs pour les ouvrir ou les fermer, et jouer n'importe quel audio correspondant. L'ouverture et la fermeture de l'action est effectuée en définissant la position cible pour un 1> Class.PrismaticConstraint1>.
Tuez les volumes
Dans quelques zones de la zone de jeu principale, telles que les étincelles électriques et l'eau près du début de la route menant à la maison, un joueur peut avoir son Humanoid.Health défini sur 0 lors de l'entrée d'un volume avec le tag
Réapparition de la mission du joueur
Le script PlayerMissionRespawn utilise un tag RespawnVolume et CollectionService pour gérer les volumes qui font réapparaître les joueurs lorsqu'ils sont touchés. Nous avons placé ces volumes sous des chambres corrompues, car de nombreuses missions ont des esp
Lors du traitement de GameEvents.PlayerRespawn, le script peut utiliser RespawnPositions, si la configuration de la mission le fournit. Si ce n'est pas le cas, il utilise TeleportPositions
Petits systèmes d'aide
Gestionnaire du piano
Le script PianoManager utilise une balise Piano et CollectionService pour ajouter 1> Class.ClickDetector|ClickDetectors1> et jouer l'un des sons du piano lorsque vous cliquez sur le clavier.
Support de rituel
Le foyer où les joueurs placent des selles a un mécanisme complexe qui subit des modifications à mesure que chaque selles est placée dans sa position définie. Par exemple, en fonction du nombre de selles placées, des événements spécifiques jouent pour activer/désactiver les lumières et les rayons, modifier la transparence de certains obj
Restaurer le gestionnaire
Certains objets sont importants pour le partie, tels que les phoques, et nous ne voulions pas qu'ils se perdent si un joueur les laissait tomber quelque part. Si un objet a un tag de restauration RestorableManager , le script de restauration de RestorableManager.StartTrack
Portails
Dans quelques missions, nous téléportons les joueurs à une courte distance dans une mission, comme réapparition des joueurs qui tombent d'une plateformetournante. Pour simplifier le déclencheurde ce type de téléportation, qui nous appelons «Portails» dans le script, une fonction d'aide ProcessPortal dans DemoUtilities
P1.Touched:Connect(function(otherPart) utils.ProcessPortal(otherPart, P2) end)
ProcessPortal gère le contrôle que l'autre partie est un humain, téléportant le joueur via un CFrame changement de coordonnée de changement, et invoquant une petite scène de coup pour cacher la transition en utilisant un événement de saut événement dans 0> 1> EventManager 1> ».
Scripts de configuration
Nous avons plusieurs scripts de configuration, de définition des données et de scripts de fonctionnalité communs : DemoConfig . Définitions des missions. Enumerations pour les états du jeu, événements pour les communications client-serveur. DemoGlobalSettings . Nous développons dans un seul emplacement, mais nous publions (et test de jeu) dans d'autres. Le script vérifie le lieuID et active/désactive diverses fonctionnalités de cheats et de débogage. DemoUtilities . Various utilités utilitaires. Traiter avec les transformations. Configurer la visibilité, l'ancrage ou d'autres propriétés. Vérifier pour un point dans une boîte de modélisation. Trouver des objets dans la hiérarchie en utilisant le nom «dotted» . Gérer le stockage temporaire (qui peut être utilisé pour déplacer temporairement les modèles «quelque part loin» et ramener AudioUtilities . Un certain nombre de fonctions pour jouer des sons aléatoires pondérés d'un configurer. GrabUtil . Fonctions d'aide pour attraper.