v1.6.2
Build Date: 2026-07-01
v1.6.2
π Features
- Per-row rain start height:
RainStartYRow1/2/3sliders replace hardcoded container Y (β223/β169/β115), live preview on slider drag viaUpdateRainContainerPositions() - Per-row ghost rain start height:
GhostRainStartYRow1/2/3absolute position sliders, independent from normal rain. - Per-row rain shadow: Independent shadow toggle, color, X/Y offset for each row (Row1/2/3), separate settings for ghost rain
- Per-row rain outline: Independent outline toggle, color, width for each row (Row1/2/3), separate settings for ghost rain
- Per-row rain width: New
RainWidthRow1/2/3sliders (10β200px), each row's rain width adjustable independently - Rain speed/height range extended: Slider ceiling raised from 1000β2000, text field upper bound fully removed
- Korean (ko) language added
π Bug Fixes
- Profile load field leak:
LoadProfileusedFromJsonOverwriteon existingSettings.Dataβ new fields missing from old profile JSONs kept their value from the previous profile, behaving as global. Fixed by resettingSettings.Data = new ProfileData()before overwrite. - Ghost rain invisible:
RainGraphicalways enabled for ghost rain, empty mesh (0 verts) with both shadow/outline off interfered with childghostImage. Fixed: only enablegraphicwhen shadow or outline active. - Ghost rain start Y trail size:
startYwas mixed into trail length calculation (FinalSize), making ghost drops appear with an initial trail. Separatedy(elapsed β size) fromdropY = startY + y(β position). - Rain invisible on first press:
RainSystem.PreWarmPoolcreated objects without a valid Canvas. Removed pre-warming entirely. - Color foldout resetting per-item state every frame: Foldout expanded state was overwritten each frame.
- KPS/Total sub-foldout comparison: Used
>=0instead of==t.
π§ Performance
- Zero-allocation KPS/Count display:
NumBuffer.Formatwith pre-allocatedchar[32]+TMP_Text.SetText(buf, offset, length)eliminates per-frameToStringallocations - Queue pre-allocation:
PressTimes(256) and per-key KPS queues (32) pre-allocated - Idle skip:
_hasKeyPressActivityflag skipsProcessPerKeyKpsInUpdateloop when no keys pressed
π§Ή Refactor
- Profile system:
KeyViewerSettingssplit intoProfileData(all config) + meta wrapper. Multi-profile create/switch/rename/delete - GUI refactor: Extracted
FloatSliderField/DrawFoldoutButton; splitDrawSettingsWindowinto 10+ standalone section methods - RainSystem refactor:
UpdateEffectssplit intoSyncCachedSpeeds/UpdateSingleRainDrop/ApplyRainTransforms/UpdateFadeOut/UpdateTrailEdge - AddQuad signature simplified: 7 params β 4 params
(VertexHelper, Rect, Color, Color) - I18n rewrite: Custom JSON parser replaced with
JsonUtility.FromJson<LangFile> - FileBased font style parity: Added
FontStyleFlagssupport (Bold/Italic/etc.)
Full Changelog: 1.6.1...v1.6.2