Launch day is finally here with a flurry of activity. It all looks wonderful and full of promise. But today my enthusiasm-swing’o’meter has barely registered. 4.0 for our standalone project can only be described as a non-event, when really it shouldn’t have been.
I’m a committed customer on a serious long-term project trying to communicate the issues that I’ve faced over 18 months of working in Unity all day nearly every day in the hope it leads to making a great product even better.
Issue 1: Incomplete Feature Implementations ( Grayed out as no longer relevant )
Okay, so the Linux build target is going to be really helpful if it all works. But earlier today I read in the Cursor API documentation that hardware cursors are only available on Windows and Mac. So that’s a piece of unusable functionality for us if it’s incomplete ( needs to include Linux, or perhaps the documentation is out of date ), much like the pathfinding was in 3.x and remains to this day. I’ve also discovered that only 32x32 cursors appear to be supported, and we have a lot of 48x48 or 64x64 cursors ( see a post on page 3 for more info ). These are but two of a number of features be they new or existing that the community have voiced their opinions on as being incomplete.
Issue 2: Mono 2.6 and Cripplingly Slow GC
The community has also complained exhaustively about the slow garbage collector. Many developers end up spending hundreds of hours rewriting code to avoid allocations - a hidden cost that has to be factored in. Unfortunately we can’t self-fix a closed API that returns new arrays or makes internal allocations that only serve to feed the problem. So we’re left tackling a periodic glitch in game play when the gc kicks in, causing the frame rate to hang for a brief but noticeable period, ruining the gaming experience. All those lovely 4.0 graphics are useless without an engine that runs smoothly - a claim made here. UT, please accept this as a request to eradicate allocations in the API by providing overloads that accept existing arrays for population and cleaning up sloppy code ( e.g. non cached lookups like .transform ), stop using sealed classes, and/or assign more resources to upgrading to Mono 2.8+.
Please note: obviously the title is intentionally a little bit silly to grab attention. We live in a world of commercial realities, and development of new features can and of course does happen in parallel to bug fixing because there is more than 1 developer. The community recognizes the need to be competitive, innovate and make sales to fund future development. The crux of this complaint is that we believe a greater priority needs to be given to more comprehensive implementations and fixing existing issues, a number of which have been around for a few years.
UPDATE 1
The thread has evolved beyond this OP to crystallize into two important questions:
-
Has coding work started on a migration to Mono 2.8 ( not just talking about it ), or is it a case of it not being a priority right now, and 2.6 is considered good enough for the majority of users. If coding has started, what is the planned version number for release?
-
Can the API be improved by 4.1 to eradicate allocations AND/OR open it up to allow the community to fix it?
UPDATE 2
There is a thorough response from Lucas@UT answering these questions. The focus of the discussion is now Issue 2.
UPDATE 3
If you notice allocations within API calls, please follow these steps:
a. Read all posts from this point in this topic to check a similar bug hasn’t already been reported.
b. Submit a bug report with the first line reading “[Function Call] API call causes C# allocation”. For example “Terrain.CullAllTerrains API call causes C# allocation”
c. Make a post in this topic including the bug report id ( from your email confirmation ) and a deep profiler image highlighting the allocation
BEFORE POSTING
Please consider following the steps to escalation to keep the discussion focused.