2.5 KiB
Unified Character Catalog Design
Goal
Make Assets/Resources/Config/CharacterConfig.json the only source of truth for
the selectable lobby characters. Refreshing the configuration from the Unity
editor must make the corresponding character selectable and loadable in the
lobby without a matching code edit.
Current issue
CharacterSwitchController builds its selection UI from CharacterConfig.json
and stores the selected character ID in PlayerPrefs. LobbyWorldController
instead maps that ID through its own hard-coded ActorPaths array. A generated
entry such as cityboy_sk is not in that array, so the mapping falls back to
figure 1 and displays Assasin.
Design
LobbyWorldController will load the same resource configuration used by the
selection UI. It will use the ordered characters list for both directions of
the existing network mapping:
- selected character ID -> one-based
Figureindex sent to the server; - received one-based
Figureindex -> the configured prefab path to load.
The order generated by CharacterConfigGenerator remains alphabetical and is
therefore deterministic across clients built with the same content. The
network protocol remains unchanged: it still carries a one-based integer.
The hard-coded actor-path array will be removed. Config loading validates that
the list exists and contains usable entries. If configuration cannot be read,
or a selected ID is absent, the lobby will log a specific error and use the
configured default character (or the first valid entry) rather than silently
mapping the unknown ID to Assasin.
Components
CharacterConfigDataretains lookup of character items by ID and default selection.LobbyWorldControllerowns a loadedCharacterConfigDatainstance and uses it to resolve figure indices and prefab paths.CharacterSwitchControllercontinues to populate the UI from the same JSON asset and to persist the selected ID.
No prefab or network-server change is required.
Error handling
On missing, invalid, or empty configuration, the lobby does not index into a path array. It logs an actionable configuration error and avoids attempting to load an arbitrary model. Invalid remote figure indices are handled as invalid configuration data and fall back to the catalog's default item.
Tests
Add focused tests for catalog-to-figure and figure-to-prefab resolution,
including the generated cityboy_sk entry, unknown IDs, and invalid indices.
Keep existing valid figure ordering compatible with the network protocol.