Unity 4 was just announced, and many of you are probably thinking about if you should upgrade to Unity 4.0 now or later.
Whither Unity 4.0?
We realized that it wasn't scalable for us to keep grouping everything together in super-massive releases. Therefore we're trying to spread them out instead. That’s unfortunately meant that not everyone feels there's enough value in Unity 4.0 for them. In that case, you're of course welcome to wait with upgrading until you feel you get enough value for your money.
The alternative is to keep the stuff that is ready longer, just because some other features are not ready yet. That’s less awesome, so we'd rather offer features up sooner, and only wait with the stuff that isn't ready. So to summarize, Unity 4.0 is just that – the first in a series of Unity 4.x releases, during which we’ll have some sweet things to share. More on that in upcoming posts.
Now, what about Unity 3.x?
We’ll keep delivering critical fixes for 3.5 at least through 2012. This means, when iOS 6, or Android 4.1, or Mac OS X “Mountain Lion”, or ... comes out, and if some things in Unity 3.5 break because of them, we’ll fix them. These problems are usually in the form of “new mobile compiler toolchain breaks something” or “new popular phone is out with not-too-good drivers and some shaders do not work”, or other serious ship-stopper issues. We’ll simply fix them in minor 3.5.x releases.
Right now, Unity 3.5.3 is being tested (current release is 3.5.2), and will be out soon. (Edit: Unity 3.5.3 is out!) It improves some things, particularly some mobile performance regressions compared to Unity 3.4, improves mesh data handling in general, and fixes a bunch of issues. Here’s what it will have in more detail:
Geometry data improvements
Unity can now completely remove parts of mesh data that are not used anywhere. For example, if you have a mesh with normals, tangents and two UV sets, but none of the shaders in any of the game scenes need tangents or UV2, then tangents and the second UV set will be stripped out from game data completely. The result is smaller game size, smaller memory usage, and faster performance for code parts that access mesh data often, like skinning and dynamic batching.
You can already achieve this in previous Unity versions by carefully setting up mesh import options (not generating UV2 when not needed; turning off calculation of mesh tangents etc.), but that’s quite a lot of manual work. In Unity 3.5.3, all that is completely automatic, just one option in Player Settings.
In addition to the above, for procedurally created meshes, we’re extending mesh.Clear() function to be able to keep existing vertex layout. In Unity 3.5, Clear() was clearing mesh data completely, meaning that not only vertices and faces are gone, but vertex layout (whether mesh has normals or tangents or colors etc.) was reset to contain “nothing”. This is not very efficient if you’re recreating the mesh with different vertex count, but keeping the vertex layout the same. We’re fixing this, Clear() will take a parameter whether to keep the vertex layout or not (defaults to keep it).
A small feature for 2D games
Some 2D games use a perspective camera to get parallax effects or because they want to mix some 3D elements in. However, for sorting semitransparent objects, Unity was taking actual distance from camera to the object as sort criteria, which produces wrong sorting order near edges of the screen. 2D games are better off sorting by “distance along camera’s view direction”, and in Unity 3.5.3 this mode can be set on your cameras.
There’s about 40 issues fixed in 3.5.3, mostly falling under mobile (Android or iOS), editor, rendering and Native Client areas. This includes stuff like: working around a peculiar compositor bug on Kindle Fire that was affecting semitransparent objects; fixing some splash screen orientation bugs on iOS; fixing fog not rendering correctly in some shader model 3.0 shaders and so on.
So to recap, Unity 3.5.3 will be out real soon, and we’ll follow up with other 3.5.x releases through this year. Now go make some games!