Unity Development Experience
Notes on Unity installation and development experience, covering Tuanjie engine compatibility, tilemaps, debugging, components, physics, animation, and the input system.
Updated
Usage Experience
Installation
Installing Unity is supposed to be fairly simple: install through the Hub, and dependencies and such are handled automatically.
However, due to HarmonyOS compatibility and similar reasons, the Chinese version of Unity has been split into a separate product called Tuanjie, and after installing Unity, Tuanjie gets installed as well. The editors of the two are not even compatible with each other, which is very strange.
Development
Development is basically easy to get started with; in most cases you just drag, drop, and configure inside the UI editor.
Except for some interactions that are quite annoying:
- Rule tilemaps cannot import random images via multi-select
- The rule-matching priority of tile rules is inconsistent with the layer coverage priority, which is cognitively confusing
- The tilemap editor experience is poor; what each button does is unclear, so you have to try them one by one
- Moving a generated Input Controller in the asset explorer does not automatically update its generation path
- Because of the low-code development model, debugging is difficult, especially when errors appear in auto-generated files
- The built-in lifecycle is strange: some callbacks start with onXXX and some do not; the naming convention is inconsistent
- When the code has errors, opening the project requires entering safe mode, and it is very laggy
Of course, some features are also really interesting:
- Built-in collision detection and a physics engine, which can be configured very simply
- Functionality is quickly reused by continuously adding components to elements in a component-like pattern (though component dependency management is painful)
- Animation editing is flexible, split between controllers for state transitions and individual Animation clip editing
- The new InputController is a pleasant surprise: implementing listeners is simple, and it is cross-platform compatible