Unity 2017.1 — when small things count

We've just released Unity 2017.1 which while being just a next Unity update begins the new era of the Engine. If you are as excited as me, don't forget to read about new amazing features on our Blog.

Unity 2017.1 has more features and fixes than that blog post had space for, but unfortunately nobody reads Release Notes. So, I compiled a list of little fixes and features which are probably too small but I find them really important.

Editor: New projects now default to text-based serialization.

When you are creating a new project, do you also go to Edit > Project Settings > Editor and set Asset Serialization Mode to Force Text every damn time?

This is the best feature of Unity 2017.1! Hands down! Saving millions of man hours.

UI Profiler

This is not a small thing, but was not included into the main blog post for some reason. The UI team made an amazing UI Profiler which shows how much CPU time UI rendering takes and also tells why UI objects were split into many batches.

This is a great tool to profile UI in your game!

Update: UI Profiler was added to the oficial post.

UI: Added support for selecting multiple files in the "Assets/Import New Asset..." dialog, on all platforms.

I have never used this dialog specifically for this reason. It is much easier to select and drag a bunch of assets to the Project Window. It is too late for me to change, but you might consider using this dialog instead.

IL2CPP: Improved IL2CPP code conversion time on OSX. Conversion times may improve by as much as 2x.

Yey! Faster iOS builds!

Editor: Log messages from connected players will now show in Editor console for easier debugging.

This is really cool! Now you can use Profiler connection to see logs from a game running on device in the Editor Console window. I randomly noticed this during a 2017.1 beta and was very excited!

Physics: Add ability to manually simulate 2D physics using "Physics2D.Simulate(time)" and turn auto simulation on/off with "Physics2D.autoSimulation=true/false".

Also the same for 3D physics:
Physics: Expose Physics.Simulate and Physics.autoSimulation. This allows stepping the physics simulation manually, from scripts. Useful for customising the server-side physics, in-editor simulation, and more.

This change gives you control over when you want to simulate physics. The ability to simulate physics in the editor is really powerful.

Asset Pipeline: Added methods AssetBundle.GetAllLoadedAssetBundles and AssetBundle.UnloadAllAssetBundles.

If you really need to unload everything! This is really helpful in the editor when you load a bundle but a link to it is lost during an assembly reload.

Editor: Added callbacks for assembly reload events: two events are dispatched: one before and one after reloading all assemblies. See: class AssemblyReloadEvents.

before and one after reloading all assemblies. See: class AssemblyReloadEvents.
If you have ever developed a non-trivial Editor extension you remember the pain for figuring out how to handle assembly reloads changes properly. Especially when transitioning into Play Mode.

We used to have EditorApplication.playmodeStateChanged callback with some code checking EditorApplication.isPlaying and EditorApplication.isPlayingOrWillChangePlaymode properties to figure out why the assemblies were reloaded.

Now we have AssemblyReloadEvents.beforeAssemblyReload and AssemblyReloadEvents.afterAssemblyReload.

Editor: Experimental feature : retained-mode UI system for the Editor (UI Elements).

Have you ever done any Editor scripting? Unity uses this unfamiliar to most of the people concept of Immediate Mode GUI for its interface. It is not easy to start writing your own Editor extensions and takes some time to learn how to do it right.

This is why we are working on a more convenient system to write Editor extensions which is based on a more traditional paradigm — Retained Mode UI.

This system even supports CSS to style elements.

UL Elements is an experimental feature right now, expect many changes in 2017.2. If you are interested, read more at our Github account.

Build Pipeline: Added delegates to BuildPlayerWindow that allow overriding the default Build button behavior.

Many of you write your own build logic and execute it from the top menu. BuildPlayerWindow.RegisterBuildPlayerHandler allows you to override default behavior of the Build button.

Graphics: Increased batching limits to 65,000 vertices. (810600).

There was a limit not only for the number of vertices, but also for the number of indices, resulting in less optimal batching. Now static batching can combine more stuff!

Shaders: Optimized game data build time for shaders with massive ("millions or billions") potential variant counts. Fixed shader inspector popup menu to display variant counts larger than 2 billion properly.

For those who have massive shaders q:

Scripting: Rename to Debug.logger to Debug.unityLogger (852000).

This thing was just a bit annoying. Basically, when typing Debug.lo in a code editor you'd get Debug.logger autocompletion while you needed Debug.Log. I guess, thousands Unity developers have already learned to just type Debug.Log...

Editor: Fix focused Game View not always receiving input (macOS) (895460).

This one was reported by me and broke one of my pet projects. Basically, a big detached Game View on Mac wasn't receiving input at all ¯\_(ツ)_/¯

I guess, I was the only one trying this on Mac. Glad this was fixed.

Editor: AssetServer version control support has been removed from the editor.

This last one is kinda sad. To move the Engine forward we unfortunately have to remove old code and features some people might still be using.

That's all, folks!

So, this is my quick list.
What is the small feature YOU are most excited about?

Show Comments