We're still in the middle of performance optimizations - two are already in but the full "orb-pooling" isn't done, yet. But as we had a rather annoying issue with the UI not working when the game lost focus (e.g. because you opened the SteamVR dashboard and looked at the desktop in VR), since the update to Unity 5.5, we push out what we have.
One issue I'm aware of with this version is that the tracers in story-mode won't work, so that effects level 6 ("OrganAndDub") and parts of two of the tracks in level 11. Another issue that was recently reported is orbs not arriving at the player in level 3 - I wasn't able to reproduce that one in the normal but saw an issue that may be the same thing in "Party Mode" (which I just fixed in this version).
Here is the full list of changes / fixes:
- Fixed off-by-one bug with repeating Sliders that caused the arrow to be shown on the last path (where there would be no more repetitions)
- Special combos (long combo, almost full combo, full combo) now only trigger an event when the beatmap has at least 100 orbs / sliders / spinners. Otherwise, it's not really an interesting achievement.
- Level 01 (story-mode): Upgraded ReliefTerrainPack from 3.2i (more than one year old) to 3.3g (version from March 22nd, 2017) ... this took us from 97 warnings (since we updated to Unity 5.5) to 65. And it also pretty much trashed Level 1. But fixing it also made it look much nicer, and we've moved the palm trees so that Pritvitej gets a little more sun. So overall, this should be a huge improvement for Level 1.
- Converted quite a few FixedUpdates methods that have nothing to do with physics to Update, which reduces load on the physics engine (this is a very minor performance improvement / cleanup)
- Added physics time compensation - this should significantly improve precision of timing when orbs are caught
- Fixed very annoying issues with UI since we upgraded to Unity 5.5, where clicking any other application would disable the UI inside Holodance (in VR) completely until you click into Holodance on the companion screen (with your mouse) to make sure it has focus again. This was caused by Unity 5.5 completely disabling their UI event system when an application loses focus. Work around was writing my own EventSystem that does not do stupid things like that.
- Improved profiler logging so we can collect reliable allocation data to validate our performance optimizations; what we do is capture 10 seconds (seconds 5 to 15) in Freedom Dive; we had already done a few optimizations before but what we start with now is about 4 MB allocations in those 10 seconds, with about 105 frames that have allocations larger than 10 KB
- Optimization 1: During gameplay, each frame had a 0.5KB allocation due to an enum being converted to a string in SkipVoiceController (this was for checking which button on the controller was pressed). Fixing this took us to 3.5 MB allocations in 10 seconds and about 100 frames that have allocations larger than 10 KB (obviously, shaving a 0.5KB per frame allocation has fairly little effect on a frame count based on 10 KB per frame)
- Fairly big refactoring as preparation for optimization 2: The Slider logic was mixed into the orb logic until now. After the refactoring, Sliders have their own class, much like Spinners (just that they are quite a bit more complex). This way, we can do a lot more with pooling ;-)
- Our "collision delegation" was actually no longer necessary. And most likely the cause of a lot of unnecessary method calls. Fixed.
- Also, the orb collider was not disabled for Sliders, so you could just stay in the initial area and still pass the Slider. Ooops. Fixed.
- Optimization 2: Pooling Sliders and Slider Segments (that are used to build the paths) according to first tests, we're down to 3.2MB allocations in 10 seconds ... this is less than what I expected but the version I tested this with still had an audio bug that may have caused extra-allocations ... will edit this posting when I have further results. EDIT: It's still 3.1 to 3.2 MB per 10 seconds but the number of frames with GC Alloc more than 10KB went down to 95 to 100. It's still not such a big change but optimization 3 is pooling the actual orbs and I hope that will make a big difference.
- Fixed party mode (that didn't even start up); there's still two issues there: One of the tracks in level 3 goes crazy, and the tracers in level 6 are broken (as expected, from the recent slider refactoring).
- Changed the rotation direction of the orbs flying towards the player.