♪ [MUSIC] ♪
Hi, everyone. My name is Thomas Jacobsen,
and I'm a Technical Product Marketing Manager at Unity.
One of the things I had the privilege of working on
at Unity is the releases.
For me, personally, I'm always excited
when we start preparing for a new release.
It's not uncommon that we have several hundreds
of features and improvements, way too much to cover it all;
and hence, my job is also to help pick out, along with my teammates,
some of those features which we believe are the most valuable
and relevant to call out.
Preparing for these is hence an opportunity
for me personally to look inside what's in the box, what's new,
and understand what problems we can now solve
with all the new tooling available. That's it, though.
While new is always exciting, I'm often more excited
about the little things, the improvements which makes it
easier to work in the Editor, which makes iteration times faster,
and particularly when the workflows just feels a bit smoother.
At Unity, we believe the world is a better place
with more creators in it.
And in our team, we work in close collaboration
with many other teams inside Unity, to help provide guidance on
how you can be successful with the new tools. This includes
everything from creating blog posts, technical talks,
to helping out with the tutorials, and with internal sample projects.
In this session, I'll be covering ten features
from the recent Unity 2019 LTS,
which we believe can help you and your team be more productive.
The features I picked are with a particular programmer in mind,
but several of these features are just general workflows.
If you identify yourself with more of an artist
than a programmer, there might still be something for you.
I'll try to keep it short, this session is supposed to be
more of an inspiration, rather than an extensive starting guide.
However, I'll also provide some links and tips
to where you can get even more resources along the way
in the description. Before we dive in, let's quickly recap
on Unity 2019 LTS.
As per its definition, Unity 2019 LTS simply continues
when it left off from 2019.3. It includes everything
from the previous TECH stream releases of 2019.
In other words, everything which released
in 2019.1, 2019.2, and 2019.3,
but just with all the updates and fixes which were added to it
since the release of those.
Furthermore, the LTS is supported by weekly updates
for a two-year period from the time of its release.
This means that if you're past the pre-production phase,
and you don't want to add more features,
you don't need those, but you just want to stabilize your production,
then we recommend you use the latest LTS version.
If you're in the pre-production phase, that is, still prototyping
a few game mechanics or testing out some new features,
and considering whether to use those in the upcoming production,
then the TECH stream is generally where you want to be.
At the time of this recording, the beta of 2020.2
is now available if you want to check that out.
To summarize, in 2019, we had three TECH stream releases.
These were followed by the 2019 LTS.
This year, we only had two TECH stream releases:
2020.1, which was released early in the year,
and 2020.2, which at the time of this recording,
is available in beta.
These will be followed by the 2020 LTS next year.
The reason why we have two releases in 2020
is that we want a longer stabilization phase.
We want to allow more user feedback in the alpha and beta cycle,
and we want to do what we can to create a robust and stable release
by having this updated to cadence.
To provide some context for the features, I'll be showing
throughout the presentation, I'll be leveraging the project
called
It's a project which is designed for beginners to get started
with coding with Unity,
but it does also come with some cool Assets
which we can use to make things a bit more interesting.
The project is available free. You can find it in the Asset Store.
I'll also provide a link in the description.
Okay, let's dig into some of the new features which we cherry-picked
for this presentation.
Ten new features in Unity 2019 LTS,
which we believe can help speed up your productivity.
Here are the ten features we'll be covering in this session.
We provided timestamps for each of them. You can just jump to
the sections which you find interesting, and skip the ones
that you don't. It can be difficult to locate specific content
when you're building large projects.
Quick Search helps with that.
It lets you find anything in the Editor, from Assets,
GameObjects, settings, to even menu items.
Hence, Quick Search was designed
to help speed up your workflow significantly.
To access Quick Search, go to the Help menu,
or use the keyboard shortcut, then type in your search.
You can interact directly with the search results.
In this case, when I'm searching for a Prefab, it takes me straight
to the Inspector where I can change its properties.
But I can also pull it directly into the Scene,
or interact with it in other ways.
Another example of where Quick Search is useful
is in terms of the different settings and windows.
In this case, I can search directly from the Project Settings,
and will take me straight to that window.
Quick Search is available as a package with 2019 LTS,
and hence, you need to install it from the Package Manager.
Once you install it, it's a great idea to run the Setup Wizard
to configure preferences and get the optimal results.
The performance can depend in terms of the size of the project.
Customizing it to your needs is often preferable.
The Shortcut Manager gives you an interactive visual interface
and a set of APIs which make it easier to manage user hotkeys.
You can find the Shortcut Manager on the Edit > Shortcuts.
From the window, you can easily visualize existing bindings,
and customize new shortcuts to your preference and workflows.
This way, it helps visualize and address
if there are any conflicts between shortcuts.
As an example, if multiple packages use the same shortcut,
it also triggers a notification
and offer options for handling conflicts.
Presets allow you to customize the default state
of just about anything in Unity but without having to write any code.
Hence, they can benefit you in streamlining repetitive tasks,
or to ensure design decisions by enforcing standards
and project templating.
In this example, I would like to reuse the settings from the Shader,
apply it on the Light...
I'll just change the color,
but Presets can capture multiple changes.
I saved it as a Preset.
I can then easily apply it to another GameObject
with just a few clicks.
This is a simple example, but imagine if you have thousands
of GameObjects and multiple teams to keep track of.
Presets can also be helpful in the process
of documenting design decisions,
as well as keeping your team aligned by making it easy
to apply these rules across large Scenes
to ensure consistency.
As a Scene becomes more detailed, it often helps to temporarily
hide specific objects, so it's more easy to see the relevant context
and edit without obstructions.
You can, of course, just deactivate the GameObjects,
but in the last scale Scene, that is not the most optimal workflow.
Instead, you can now use the Scene Visibility controls.
These allow you to quickly hide and show objects in the Scene view,
but without changing the object's in-game visibility.
To use the controls, simply click the eye icon
left of the GameObjects.
Then ensure the Global Settings is on.
This way, objects are now hidden in the Scene view,
but not in the Game view.
With Unity 2019 LTS,
we also replaced the old Asset Database Version 1
with the new Version 2.
New features include Asset Dependency Tracking,
and you can now also have multiple revisions stored
in the Asset Database. This can help speed up
your platform switching, as well as when swapping between
previously imported versions of Assets.
The new Asset Database is part of a larger initiative
to improve import pipeline workflows,
which lay the foundation for a more reliable,
performant, and scalable pipeline.
In short, if you're working on large projects,
this will help speed up your import times significantly
when combined with some of the other initiatives
which are in the works; and hence, will be made available
in the upcoming releases.
If you're not sure if Asset Database is already enabled,
simply go to Project Settings, then Editor,
then check if Version 2 is enabled.
We updated the Editor console with clickable stack trace links.
This means you can now jump directly into the source code line
for any function call listed in the stack.
We also added a small search tool,
which allows you to filter your console entries.
Another update in 2019 LTS
is to move the Code Editor Integrations, also known as IDEs,
from core to packages.
With that, we also exposed our C# APIs.
To use Visual Studio, or Visual Studio Code, or any other IDE,
go to Package Manager, and install the appropriate package.
Once downloaded and installed, go to Preferences,
go under External Tools, then select the new IDE.
For those of you using Visual Studio,
we've recently published a blog post with ten tips
in terms of how to be more productive with the IDE.
You'll find a link in the description.
Another foundational feature in 2019 LTS
is Incremental Garbage Collection.
As the name implies, it provides you a new way
to handle memory management. With the old garbage collector,
the program would pause in its execution,
handle the memory management, and then resume.
For larger projects with real-time gameplay mechanics,
this could be a problem because it could lead
to occasional frame stutter.
The new Incremental Garbage Collector allows you to split up
the memory management into multiple slices.
That means that instead of having one lengthy interruption
of the program, you'll do multiple shorter collections.
While this will not make your program run faster,
it does mean that you'll experience much fewer GC spikes,
and hence, a much smoother gameplay experience.
It will distribute the workload
over multiple frames rather than one.
To enable the new Incremental Garbage Collector,
go to your Project Settings,
go to the Player,
scroll down under Settings, and enable.
If you'd like to learn more of how the Incremental Garbage Collection
works, check out this blog post which we did some time ago.
When investigating performance through the Profiler window,
you were able to see profile data from 300 frames at a time.
That didn't however always give you enough time to catch the frames
you really care about.
With configurable frame count, you can now extend
that capture window from 300 to 2,000 frames.
To change this, go to the Preferences menu,
go under Profiler, then change Frame Count there.
Other improvements include Deep Profiling Support.
When you build a player with Deep Profiling Support,
you're able to record timestamps when entering
and exiting C# methods.
However, this C# instrumentation may come with performance overhead,
so we also added the option to toggle it off per player.
Finally, we introduce call stacks for managed allocations in players.
This allows you to see the C# function,
where GC allocations come from when you're profiling the players.
If you like to learn more about profiling and some newer features,
we highly recommend our Unite Now session,
Introduction to Profiling, from earlier this year.
We'll provide a link in the description.
The last feature I want to call out is the new Enter Play Mode options.
For the 2019 LTS, this feature is still experimental;
and hence, I will emphasize, it is not recommended
for live productions.
But if you want to give it a go, if you're in the prototyping phase
and curious to test it out, then, by all means, give it a try.
When your projects get complex, Unity Editor can be quite slow
when you're entering Play mode.
That's why we introduced this new option.
With these options, you can disable domain and/or Scene reloading
from the Enter Play Mode process, when there are no new code changes.
In analysis, we found that it can save you up to 90%
of integration time. To access the options,
go to Edit > Project Settings,
go to Editor, scroll all the way down,
and here you find the option to enable
the Enter Play Mode Options.
You can also decide whether to include both Scene
and Domain Reload.
Find more info on how to configure Play Mode
in our documentation.
That wraps up our ten tips for this session.
Obviously, there's much more to dive into,
and picking which ten to include was a bit tricky.
We hope you found it useful, and we hope
you apply them to your projects.
As always, we are very open to feedback,
so let us know if you liked the format,
and we might do a second session as well.
Finally, be sure to check out our Unite Now page
for other sessions which might also inform and inspire you.
♪ [MUSIC] ♪