A few months back, while I was in the process of transitioning between jobs, I decided to start learning Unity in my free time. There are a lot of options when it comes to getting started in game development these days, and I was curious to find out first-hand what…
Understanding how your players are interacting with your game is critical to knowing where to make improvements. Unity provides a helpful set of analytics, which can help you get started monitoring player behaviour.
A dashboard isn’t all you need, however. You also have to install the analytics library and add using UnityEngine.Analytics to your scripts.
Performance should typically be your top concern whenever you are working on a game. While poor performance isn’t certain to cause your game to fail, it takes an overwhelmingly great experience in order for players to enjoy a game that doesn’t run well.
Fortunately with Unity, keeping track of your game’s performance is pretty easy. All you have to do is open up the built-in profiler, and you’ll have tons of performance data to look through.
With the profiler open and your game running, you can watch your game’s performance in real-time. If you need to get even more specific, Unity offers more advanced features using the profiler API: https://docs.unity3d.com/Manual/LowLevelNativePluginProfiler.html
Scriptable Objects were a new concept to me as I started learning Unity. The basic idea is to create a standalone script independent of the scene, and which can’t be attached directly to any GameObject. Two main ways I’ve seen Scripted Objects used, are data persistence and templating.
When you’re starting out with Unity, one of the things you’re almost certain to run into is race conditions. When you start up your game or load a new scene and everything starts up at once, you may have a hard time making sure things happen in a specific order. Callbacks are a great solution to this, assuming you’re already familiar with using delegates.
As you can see, this is a very convenient way to enforce an order of operations, especially across multiple GameObjects which are all doing things at the same time. There are some even more advanced ways to streamline this code such as Actions and Lambda expressions, but these aren’t really necessary in order to start taking advantage of callbacks.
Delegates are generally considered an advanced topic in C#, but in actuality, they are really very simple. All a delegate does is allow a method to be used as a variable.
Already you can probably think of some interesting uses for delegates, but the reason they are an advanced topic…
There are two main ways to save data in Unity. The first is using something called PlayerPrefs. This basic method allows the saving and loading of basic data types quickly and easily.
For anything more complicated, you’re going to have to assign the System.Serializable attribute to your data, and then decide what data format you want to use, and include the proper namespace in your project. Whether you want to write out binary files using something like System.Runtime.Serialization.Formatters, or JSON using UnityEngine.JSONSerializeModule. Depending on the format that you use the process of writing your file to disk might be a bit different, but Unity does throw in a helpful way of defining where in the file system your data goes.
In programming there are is usually more than one way to solve a problem. Unity has an interesting opportunity space when it comes to components, and what each C# script is responsible for. Taking a look at something like health, it would be possible to create an interface that contains…