Matmi produce games and experiences across a wide range of applications, from desktop & mobile, to embedded systems. Therefore, it’s important we can deliver software to multiple platforms with ease. That’s why we love Unity! We have been using Unity for nearly a decade and during this time we have developed loads of apps including the Gorillaz – Escape to Plastic Beach, Pocket Warwick for Warwick Davis, Rollabear, Red Bull Racing and more recently DiaryZapp.
Keen to stay ahead of the game and keep up with the latest industry tools and trends, we sent Glen (one of our Unity developers) to Unity Amsterdam ’17. Here’s what he had to say…
After visiting Croatia, Slovenia, Germany, Austria, I found myself in Amsterdam – Oh yeah and just to add I drove to these places from the UK within 11 days. I somehow managed to find a tan, jump into the freezing cold clear Slovenia rivers, water rafting, cliff jumping in Croatia, skiing down the alps of Austria and then somewhat found myself in Amsterdam! #uniteeurope 2017 – I guess I’m subconsciously enjoying the open borders whilst it lasts #brexit.
I must say that my BMW has done me well, so well that I couldn’t stop taking photos with it and hardly took any of myself but – that’s also because I’m a little camera shy! ☺
UNITE Europe 2017!
My first day was held in theatre Amsterdam, in Westpoort where registration took place, shortly after, the keynote began!
What happened in the key note?
The keynote was hype into what we can expect unity to bring in the release of unity version 2017.1 and a highlight reel showing us recently developed games – in unity of course.
What hyped me!?
Timeline, c# job stack / multi-threading, Cinemachine, 4.6 mono / C# 6 experimental, remote settings, standard events and more!
With these in mind and with the help of a leaflet, random like-minded individuals, free food and alcohol! I mapped out my schedule for the remaining days – of course I mainly chose development related talks – because I am a dev!
There is lots to talk about, but I’ve pulled together some of the more interesting points to save you the hassle of searching the web!
Cinemachine is Unity’s new powerful visual tool that allows artists and designers (using the camera) to create cinematic content (like the award-winning Adam short film), cut scenes, gameplay sequences, and much more. Here are a few things you can do with Cinemachine!
- Blend between different cameras
- Give cameras constraints / evaluate current situations for example if camera 1 is following a target but the target is no longer in view, you can request Cinemachine to find a camera within a group, that can see the target and switch to it.
- Easily use for side scrolling, third person, first person, focusing, and following targets
- Dolly tracks
Even as a developer I am keen to get my hands dirty with Cinemachine because I know how time consuming coding cameras for specific situations can be and this requires no code.
So… cinemachine uses timeline to animate and create cinematic sequences to get the epic movie shots! But what’s really nice is the fact that we can harness the power of timeline and use if for anything – more work for the designers less time for me! Ha I’m not that mean, but generally when I’ve created in editor tools to allow the designers to do the work as opposed to me, in the long run, it reduces number of hours required on a specific tasks / mechanic to be developed and thus helping everyone in the long run.
Anyhow starting to steer of topic… harnessing the power of timeline, developers are now given the ability to create custom playables. Playables can be assigned to an object and these can be visualised which in turn can be used as part of a sequence in timeline.
What’s interesting about this is the fact that we can create a custom playable that perform certain evaluations and based upon those evaluations will then determine different results and have the ability to view what the object would be doing at the specific point in time – by simply scrubbing along the timeline sequence.
An example of this would be to write a script that would lerp between two vector positions developers / designers could then scrub along the sequence to see how far the object has moved from a to b.
Heiko Weible and Marijn zwemmer from Wooga showed of their custom animation system that involves the recording of certain actions for example user interactions.
Using this information, they could replay the user’s journey within the app using timeline. All they have to do is simply download the recording / sequence and replay it in the editor and identify where the bug happened, and inspect the values relative to the bug for example inspecting / debugging rotational values in visual studio!
A scenario – a user reports an object acted weird when the user decided to move to a location within a game? You try to replicate it, but you can’t and it leaves you scratching your head? If it’s one of those pesky bugs that happen one out of a million times, then you’re in for the time of your life, trying to identify what went wrong can be a pain. Their solution allows them to download their user recorded session replay it in unity, pause the sequence when the app decided to act weird and inspect values. Instead of going in blind powerful stuff!
Their solution is a really neat solution and clearly shows the power of Unities new timeline feature and the ability to extend it.
There were a few talks about developers build pipline. It’s clear having machines to handle automation, build and deployment is beneficial. I’m really keen to add into my practice as a developer, especially now I’m in an environment where deadlines can be tight and the need to shave off anytime where need be, is always a good thing. Deploying to multiple devices takes a while and in the end, adds up to hours and even days, especially if you’re having to manually build and deploy to multiple devices and for IOS.
Some few tips to improve your build pipeline
- Use unity collaborate and cloud build services to distribute builds – so other people can download and use for example clients
- Deployment machine – When someone has committed to git, deploy a build to many devices using a build machine
- Automation machine – Deploy and run tests on your devices and then send reports to analytics API – for example testing frame rates on devices to see if the last commit damaged the fps and to see if it’s results differentiate between devices.
- Essentially anything you can automate to other machines that frees up your main machine is always a bonus.
Remote settings and Standard events
Unity introduced an upgraded analytics API that has ‘standard’ predefined events / methods you can call which will add predefined analytics to your game with ease, stripping out setups that you would normal take to record for example an onlevelcomplete event and instead allow you just to call a line of code (without the need to create segments). But they have also left the ability to add custom events where need be, because obviously they can’t tailor for all users specific needs.
Remote settings that allow you to hook up variables within your game to update according to settings on a database, a simple example was shown to me when you simply change the game difficulty from easy to hard using the remote settings manager on the web, which was then reflected on the app. A benefit that was stressed over the talks was the fact that users will no longer have to rebuild their app if they want to do small changes, but instead users can change settings on the fly without having to rebuild / redeploy an app.
Remote settings were used in conjunction with asset bundles where users could link up a key word and download assets on the fly. This is good for initial app size; a good benefit of this would be to change a seasonal theme from Christmas to Halloween.
Yes, yes, yes! Multi-threading C# job system is the future… well I have to wait for some while but it’s coming! Joachim showed an example of how fast the new multi-threaded system accompanied with the new C# job compiler (that automatically creates optimal code for the target platforms) greatly boasts performance especially in the realms of complex mathematical computations. In his is example he showed how 20,000 AI agents that ran on the main thread was dragging the fps down to 11fps but when he enabled multi-core processing Oh and the new compiler – the fps was running around 43FPS, this is a big jump!
Some stats for 200,000 agents simulated in c#
- Single thread: 988ms
- Multi-threaded: 123ms (new)
- Multi-thread with new compiler : 8.5ms (new)
This system will not be available in the new release 2017.1 because it’s not yet fool proof, yes fool proof! People who have already experience threading in Unity – which is not thread safe, may have found that when trying to debug threads, it can be challenging. One of Joachim’s goals is to enforce rules within the code to ensure anyone who picks up this method of programming is not going to not blow up their device, ha.
A question was asked for a comparison to C++ where Joachim goes to states that it would be just as quick if not quicker especially with the new job system compiler, but I guess only time will tell.
I was able to get my hands on Vuforia’s new targeting system that essentially allows you to give the Vuforia SDK a model object and then use this as a marker for the actual physical object.
In the example, it was a motorbike and then using the sample Vuforia app they scanned a physical 3d motorbike that had the same dimensions but on a larger scale, the app then overlaid UI elements / 3d objects over the model which users could interact with, for example pull parts out of the bike upon doing so, the app displayed a description about that part.
I think the technology is great and would love to try out with my BMW, being able to hold my phone up against my car, in real life and then pull apart the car and have the app explain about certain features of the car, sounds pretty epic! In general, I think type of technology will be good for educational purposes.
Unity package system
There was a small talk of Unity moving over to a package system where Unity will have packages that are developed by Unity but by default not included in the initial download of Unity (thus making it quicker to download Unity updates). Cinemachine is currently free on the asset store for this reason. I’m assuming that the package system will have a collection of packages, developed by Unity that users can add to as an addition to their pre-existing project.
Also played around with project tango on a ASUS phone which will be released later this summer.
What stood out to me the most was the waterless marker object application that enabled me to bring objects into the cameras view, place them and then walk around it (waterless markers? Wuuut!?), I’ve played with similar technologies before but this stood out more because of how well it performed and how stable it was.
Bunch of optimisations talks
I joined Ian Dundore talk to watch him talking about how to squeeze performance out of Unity his talk surrounded the realms of real-word problems and some of Unities architecture that developers should be aware of.
One biggie was the fact that every time the application does a change to a child component of a UI canvas it is marked as dirty, when this is the case the canvas has to re-build, the re-building process involves searching through all of its children components by get component, which is an expensive operation.
For example, if you had a canvas and the UI text component values changes from “hello” to “world”, the canvas would use the re-build process and effectively cause a spike on your application (if you had many UI component children)
To solve this having any separating static UI children components grouped and then having another UI canvas that holds dynamic content increase performance.
Wrapping up! My time at Unite Europe 2017 was epic and hoping I can make it next year! It was amazing to meet other fellow developers, listen to other people’s experiences and even share mine! I love what Unity is doing and how many big industries are willing to listen and work with developers for example Sony, Microsoft, Vuforia, Facebook / Oculus and more!
Because of this, I think Unity is becoming the next Photoshop of the game development community. Because of how easy it is to port to other platform, the support from many well-known companies, great community, the willingness to integrate highly rated packages as default packages for the Unity Editor and ever increasing features for Unity to help support the community.
First time newbie and I felt like I was at home, people who attended were interesting, talks was educational and already thinking about next year.
P.S Got to love the free food and epic party.