Un registre de données est un espace de stockage global efficace pour les structures de données marquées USTRUCT. Les registres de données prennent en charge l'accès synchrone et asynchrone aux données, ainsi que les comportements de mise en cache définis par l'utilisateur. Ils sont destinés à fonctionner avec des données générales en lecture seule.
Les registres de données font partie d'un plug-in. La page de démarrage rapide des registres de données peut vous guider tout au long du processus et vous aider à vous familiariser avec certains concepts de base. Pour obtenir les données spécifiques à une session, telles que la progression dans une histoire ou l'état actuel d'un personnage, utilisez le système de sauvegarde du moteur.
Vous pouvez configurer votre registre de données pour qu'il charge ou génère des données à partir de sources différentes, et vous pouvez l'alimenter à l'aide de la numérisation des ressources et de l'enregistrement manuel. Les registres de données sont semblables aux tables de données composites, hormis le fait qu'ils peuvent stocker des données de courbes en plus des lignes de table standard, et utilisent une couche d'indirection au lieu de composition manuelle de plusieurs tables.
Sources de données
Data Registries gather data items from two types of sources, Data Registry Sources and Meta Data Registry Sources. These sources are not the actual data items, instead the Data Registry uses them to find or generate data items. The order in which data sources appear within a Data Registry matters, if a specific data item is not found in one source, then the Data Registry will look in the sources that appear after it in the list.
This creates the potential for override and fallback behavior, and enables context-specific sources to override generic ones.
The Data Registry plugin includes built-in Data Registry Sources and Meta Data Registry Sources that wrap Data Tables (UDataTable) and Curve Tables (UCurveTable).
Sources de registre de données
The Data Registry directly owns a set of Data Registry Source objects that you can create and configure in an array within the Data Registry Asset.
These objects represent interfaces to specific data sources where the Data Registry can find information, such as an individual data table or a web database.
You can create child classes of UDataRegistrySource if you want to handle other types of data, or implement different indirection rules to map identifiers to data items.
Any child class you create will appear in the dropdown list when you add new data sources to a Data Registry Asset.
Sources de registre de métadonnées
Meta Data Registry Sources create and own other data sources at runtime. Rather than explicitly list all data sources, Meta Data Registry Sources use generic rules, such as scanning a set of user-named paths, to locate Assets that contain data items. They can also listen for manual registration of specific Assets.
Because Meta Data Registry Sources are dynamically generated, data sources (and the data items within those sources) that they discover load into the Data Registry at runtime.
Similar to Data Registry Sources, you can create your own child classes to handle other data types, create different scanning rules, and so on. To do this, override the UMetaDataRegistrySource class.
Any child classes you create will appear in the dropdown list as options when you add new Data Sources to a Data Registry Asset.
Identificateurs
Le plug-in Data Registry utilise ses propres types d'identificateurs pour identifier ou consulter les registres de données et les éléments de données individuels qu'ils contiennent. Même si ces identificateurs sont des noms basés sur des chaînes, les structures FDataRegistryType (ressources de registre de données) et FDataRegistryId (éléments spécifiques dans un registre de données) agissent comme des wrappers qui fournissent des fonctionnalités utiles dans l'éditeur.
La structure FDataRegistryType identifie une ressource de registre de données, tandis que la structure FDataRegistryId identifie un registre de données et un élément de données spécifique qui y est contenu. Vous pouvez utiliser ces types d'identificateurs lorsque vous devez trouver des ressources de registre de données ou récupérer des éléments de données individuels de ces ressources.
Le nom de chaque ressource de registre de données doit être unique dans le champ Type de registre. Si deux ressources de registre de données portent le même nom dans ce champ, le système ne reconnaîtra et ne renseignera que l'un d'entre eux. De même, si plusieurs éléments de données partagent la même valeur d'identification (nom ou balise de jeu), le registre lira tous les éléments, mais lors d'opérations de récupération, il n'aura accès qu'au premier élément chargé par la ressource de registre de données. Consultez la section sur les sources de données pour en savoir plus sur l'ordre de chargement des éléments de données.
Pour modifier ce comportement, les développeurs qui utilisent C++ peuvent créer une classe enfant de registre de données et remplacer la fonction ResolveDataRegistryId.
Identificateurs de ressources de registre de données
While setting up a Data Registry Asset, developers must set the Registry Type field to a unique name value. This is the identifier for the Data Registry.
After setting this value, FDataRegistryType fields across the editor will immediately add the new Data Registry name to their dropdown list.
This prevents user error resulting from spelling mistakes when referencing the Data Registry in other Assets, and makes the selection process quicker and easier.
Identificateurs d'éléments de données
Identifying an individual data item, such as a row within a data table, requires specifying the Data Registry Asset and the data item itself. The FDataRegistryId type contains both identifiers. Its Data Registry Type field will appear as a dropdown list, from which you can select any known Data Registry by its identifying name.
After selecting a Data Registry's name from that dropdown list, the Data Registry ID field will change to accommodate the Data Registry.
If the Data Registry's ID Format uses a Gameplay Tag, the user interface will display a filtered list containing that Gameplay Tag and all of its children. If the Data Registry's ID Format did not use a Gameplay Tag, the user interface will display a dropdown list of all known rows that the Data Registry Asset contains.
Si vous modifiez une ressource de registre de données, vos modifications peuvent ne pas prendre effet immédiatement dans d'autres ressources qui y font référence à l'aide d'identificateurs d'éléments de données. Dans ce cas, les identificateurs d'éléments de données peuvent contenir des lignes obsolètes dans leurs listes déroulantes. Cliquez sur le bouton Compiler dans la ressource qui référence le registre de données (non la ressource de registre de données elle-même) pour mettre à jour l'interface avec les informations actuelles sur les éléments de données.
FDataRegistryId ayant un membre FDataRegistryType (appelé RegistryType), vous pouvez trouver la ressource de registre de données contenant la ligne sans utiliser d'identificateur FDataRegistryType distinct.
Dynamic Identifier Resolution
By default, the system looks up data items by searching for the value of the ItemName field of the FDataRegistryId you supply. If this is not the ideal behavior for your project, you can create your own UDataRegistry subclass and override the MapIdToResolvedName function to include additional FDataRegistryResolverScope structs in the local scope. By overriding the ResolveIdToName function within your FDataRegistryResolverScope subclasses, you can remap the incoming row names, even using dynamic or player-specific information. After resolving an ID, the system produces an FDataRegistryLookup which is guaranteed to be unique (within the system) and is used as the caching unique ID.
Référence de fonction rapide
Les fonctions suivantes sont utiles pour apprendre à utiliser les registres de données. La liste n'est pas exhaustive, mais ces fonctions constituent les éléments de base dont vous aurez besoin pour accéder à vos données après avoir mis en place les registres de données dans votre projet.
| Function | Description |
|---|---|
| Returns a pointer to the |
| Takes a name or |
| Searches for a Data Registry by |
| Searches the Data Registry for the data item that corresponds to the |
| Populates a map with a pointer to the engine's |
| Finds the curve that corresponds to the |
| Similar to |
Caching struct pointers that you retrieve from a Data Registry can be unsafe. While some data items are always available, others load dynamically and the Data Registry can unload them without warning. If you are potentially dealing with data that can be unloaded, the recommended practice is to use the data immediately after retrieving it, or cache your own copy rather than keeping the pointer from the Data Registry.
Intégration avec les fonctionnalités du jeu
Le plug-in Data Registry peut ajouter à la fois des registres de données et des sources individuelles de registres de données provenant de plug-ins Game Feature. Pour plus de détails sur ce processus, consultez la page Game Features and Modular Gameplay (Fonctionnalités du jeu et gameplay modulaire).