O Registro de Dados é um espaço global para o armazenamento eficiente de estruturas de dados do tipo USTRUCT. Registros de dados são compatíveis com acesso síncrono e assíncrono aos dados, e também podem ter comportamentos de cache definidos pelo usuário. Eles são projetados para uso com dados genéricos de somente leitura.
Os registros de dados são parte de um plugin. O Início rápido de registros de dados conduzirá você pelo processo e explicará alguns conceitos básicos. Use o sistema de salvamento de jogo da engine para dados específicos da sessão como progresso na história ou estado atual do personagem.
Você pode configurar o registro de dados para carregar ou gerar dados de várias fontes diferentes. O registro pode ser preenchido por meio do exame de ativos ou manualmente. Os registros de dados são semelhantes a tabelas de dados compostas, mas podem armazenar dados de curvas além das linhas de tabelas padrão, e usam uma camada de indireção, em vez de compor manualmente várias tabelas juntas.
Fontes de dados
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).
Fontes de registros de dados
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.
Metafontes de registros de dados
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.
Identificadores
O plugin Data Registry usa os próprios tipos de identificadores para consultar registros de dados e os itens de dados contidos nesses registros. Embora esses identificadores sejam nomes baseados em strings, as estruturas FDataRegistryType (para ativos do registro de dados) e FDataRegistryId (para itens individuais em um registro de dados) atuam como agrupadores e fornecem uma funcionalidade útil no editor.
O FDataRegistryType identifica um ativo do registro de dados, já FDataRegistryId identifica um registro de dados e um dado específico contido nele. Você pode usar esses identificadores quando precisa encontrar ativos do registro de dados ou recuperar itens individuais nos registros.
Cada ativo do registro de dados precisa ter um nome exclusivo no campo "Tipo de registro". Se dois ativos no registro tiverem o mesmo nome nesse campo, o sistema só reconhecerá e preencherá um deles. De maneira semelhante, se vários itens de dados tiverem o mesmo valor de identificação (nome ou tag de jogabilidade), o registro lerá todos os itens, mas as operações de recuperação só acessarão o primeiro que for carregado pelo ativo do registro de dados. Confira a seção sobre fontes de dados para saber mais sobre a ordem de carregamento dos itens.
Desenvolvedores que usam C++ podem alterar esse comportamento criando uma classe-filha Registro de Dados e sobrepondo a função ResolveDataRegistryId.
Identificadores de ativos do registro de dados
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.
Identificadores de itens de dados
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.
Quando você edita um ativo do registro de dados, as alterações podem não ser refletidas imediatamente em outros ativos que fazem referência ao registro usando identificadores de itens de dados. Isso pode fazer com que os identificadores de itens de dados contenham linhas obsoletas em seus menus suspensos. Clique no botão Compilar no ativo que faz referência ao registro de dados (não o ativo em si do registro) para atualizar a interface com as informações atuais do item de dado.
Como FDataRegistryId tem um membro de FDataRegistryType (chamado RegistryType), você pode encontrar o ativo do registro de dados que contém a linha desejada sem precisar usar um identificador FDataRegistryType separado.
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.
Referência rápida de funções
As funções a seguir são úteis quando você começa a usar registros de dados. A seção não traz uma referência completa, mas lista as funções básicas necessárias para acessar dados depois que você configura registros de dados no projeto.
| 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.
Integração com funcionalidades de jogo
O plugin Data Registry pode adicionar tanto registros de dados como fontes individuais de registros de dados a partir de plugins de funcionalidades de jogo. Para conhecer os detalhes desse processo, confira a página "Funcionalidades de jogo e jogabilidade modular".