UniView 2.3.1
Fixes
- Font previews in Source, Source 2 and Unreal games:
.ttf/.otffonts now show their sample sheet instead of an error (they only worked in Unity games before). - Your game list and settings are safer:
projects.jsonandsettings.jsonare saved in one step, so a crash or full disk can't leave them half-written. If one can't be read, UniView keeps a copy asprojects.json.bad/settings.json.badinstead of starting over and overwriting it. - A bad value in
settings.jsonnow only resets that one setting (and says so in the log) instead of being ignored silently. - More problems are written to
viewer.loginstead of being swallowed (textures that fail during OBJ export, Blender lookup, etc.).
For plugin authors
- The plugin API in
engines/sdk.pyis fully type-annotated, with named shapes for the dicts plugins return (GameInfo,AssetStats,PluginOption,Rig, ...). Keep the template's type hints and your editor, ormypy, flags mistakes like a misspelled stats key. See Type checking inPLUGINS.md. - New optional
GameSession.font(asset). By default it rendersraw(), so returning the font file's bytes fromraw()is enough.
Under the hood
- The app's code moved from one 4,800-line file into a
uniview/package (unity_viewer.pystill starts it). No change in behavior. - Automated tests for GLB export, skeleton/animation math, settings and plugin loading, run on every build.
Windows: download UniView-v2.3.1-win64.zip, unzip, run UniView.exe. No Python needed.
🤖 Generated with Claude Code