Caveats and Limitations
The UnityId Field
The primary field in each table must be named UnityId
. This field is used to name your ScriptableObject
assets, and must be unique within a table. It is recommended that you give this field a descriptive identifier so it is easy to identify and interact with in the Unity editor. Review the following Airtable records for example UnityId
values:
Important
The UnityId
field is sanitized when it is used to generate the ScriptableObject
asset's filename. Therefore, it is recommended that it only contain alphanumeric characters, ., -, and _.
String Sanitization
Airtable allows for arbitrary characters in base names, table names, and field names. GameDataSync sanitizes these values when using them for directory and file names by removing all spaces and converting any non-alphanumeric characters excluding ., -, and _ to their numeric representation.
Asset Imports
Each Airtable record is mapped to a ScriptableObject
in Unity. As a result, the Unity asset database must import these new assets upon your first synchronization.
GameDataSync ensures that only new or moved assets are imported. While it may take several seconds (or minutes, if you're importing many thousands of records) the first time you synchronize your data, subsequent data synchronizations will take a small fraction of that time.
Airtable API Behavior
Rate Limiting
The Airtable API has a hard limit of five requests per second per base. Generally, GameDataSync can download roughly five tables per second as a result. If your bases contain many tables and those tables contain many thousands of records, it may take a few seconds to download all the data due to this limit.
Text Field Updates
While most fields in Airtable are updated synchronously between the Airtable UI and the Airtable backend that feeds the Airtable API, simple text fields are not. As a result, changing a text field and synchronizing to Unity rapidly, i.e. within a couple seconds, may result in an incomplete text value being returned by the Airtable API. Waiting a few extra seconds before synchronizing data resolves this issue.