Essential Unity® Assets for Efficiency – My Favorite Unity® Assets | Asset Store Shopping Guide

Essential Unity® Assets for Efficiency – My Favorite Unity® Assets | Asset Store Shopping Guide

Hey Game Developers,

Bilal here, and I just wanted to share all of the Unity® assets that I find absolutely essential based on the type of games you’re creating. I’ve personally used all of these assets in my projects, and I highly recommend them as premium products from publishers who clearly put effort into creating tools to help you make games faster and better.

If you’re a solo developer, these assets are MUST-HAVES because it’s very difficult to wear every hat in game development. You have to draw the line of doing everything somewhere, and these assets are a perfect place to start!

  1. Universal Sound FX – Audio

I recommend every Unity® developer purchase this package unless they already have a designated audio engineer creating all of their sounds, as the package includes many premium sounds through many different categories.

Every video game needs sound effects, and they should be consistent with the game’s style and quality. That’s why I always recommend Imphenzia’s Universal Sound FX package, which comes with exactly what it sounds like: sound effects that you can use “universally,” or in any games you create.

All the games I’ve worked on have used this package in some way, whether it’s a laser noise, game over sound, music effect, an explosion, or many other options. So if you’re looking to make an FPS, RTS, MOBA, Platformer, Top-Down Shooter, or anything else at all, this package will have a lot of high quality sound effects you’ll want to use.

If you’re convinced, you can get it right here:

  1. ProBuilder Advanced – 3D Level Editor

If you’re creating a 3D game, I highly recommend ProBuilder advanced to quickly prototype, and later release high quality, easy to create levels.

ProBuilder is an exemplary level creation tool that fits directly into the Unity® Editor. Just like you would be able to in a 3D modeling tool, like Blender, ProBuilder allows you to extrude, scale, and otherwise transform basic geometry in Unity® to shape your level however you want to.

You can also use ProBuilder to create any shapes directly in the Editor so that you don’t have to worry about importing from an external application. This really speeds up your workflow, so you can quickly create game props, and depending on your art style and game type, items, weapons, buildings, or even characters.

If you want to maximize your level creation efficiency, check out ProBuilder here:

  1. SPACE for Unity – Space Scene Construction Kit

To create a beautiful and immersive 3D space experience in your game, I recommend picking up SPACE for Unity! This package is a combination of a level editor, colorful space art including nebulas, asteroids, and planets.

In SPACE for Unity, not only do you have free access to use a library of space goodies in your scene, but you also have the option to generate a universe automatically, which will configure immersive asteroid belts, distant nebula visuals, and even allow you to test the scene with an in-the-box spaceship with maneuvering and firing controls.

To add beautiful space visuals to your space game, check out SPACE for Unity here:

All right, these are my favorite Unity® assets on the Asset Store right now as out of all the Unity® assets I’ve used, these have given my games the most noticeable quality and efficiency for creating Unity® games.

I’ll see you in the next post,


The Ultimate Hardware Guide To Optimizing The Unity Editor

The Ultimate Hardware Guide To Optimizing The Unity Editor

One admirable aspect of Unity® is the ability to run it on many different platforms including MacBook Pro laptops and some Windows laptop and desktops that aren’t very high end. While it’s true that Unity® can run on all of these platforms, there is a lot of improvement that can be done for your machine to increase performance of the Editor on your machine.

Before investing in new hardware, you’ll want to know which parts will affect the performance of Unity®, and in which areas you’ll see the changes. There are a few features in the Editor that specifically bottleneck the software, while other features might not affect performance noticeably. These include starting up Unity®, applying asset import settings, importing assets, building executables, running in-editor, and any operations with many tasks that can be either from third party assets, your code, or Unity®.

To proceed, let’s talk more about the specifics of each of these categories, and how we can speed up Unity® while performing any of these tasks. In respect to the order in which you use Unity®, we’ll start with the topic of starting up the Editor.

Improving Unity® Startup Speed

When starting any application on any modern computer, data is typically loaded from storage into memory, which means that the data read speed of your storage device, be it a hard drive (HDD) or solid state drive (SSD), is what will affect how quickly an application will start. That means the drive on which you installed Unity® is bottlenecking the Editor’s startup speed. This can be noticed significantly as your number of project files and references to them in your scenes increase.

This can work in your favor since increasing the read/write speed of your machine has one of the most noticeable effects on efficiency of tasks. From personal experience, the differences between the speeds have exceeded expectations and made developing much easier as I switch between art, game development, programming, video editing, and other software.

So let’s talk about which devices you should invest in! If you’re currently still using a HDD, rather than a SSD, as your primary drive, I highly recommend upgrading to a SSD. Simply installing your Operating System on an SSD can have a large impact on how fast you can get to work. If you’re not ready to make a large investment in upgrading your HDD, I recommend at least getting a SSD with 120 GB storage or a little bit less so you can install your operating system and primary game developer tools, like Unity®, Visual Studio 2017, Adobe Illustrator CC, and anything else you use almost every day. I always recommend SSDs from Samsung’s line of EVO Solid State Drives as they perform exceptionally and are reliable.

Here are my recommendations if you don’t want to invest too much:

Samsung 750 EVO – 120GB – 2.5-Inch SATA III Internal SSD (MZ-750120BW)

Samsung 850 EVO 250GB 2.5-Inch SATA III Internal SSD (MZ-75E250B/AM)

And if you have an M.2 port on your motherboard, or are willing to purchase a new motherboard with an M.2 port, I highly recommend purchasing an M.2 SSD as I am currently satisfied with my own; you will notice the difference between one of these and a standard SSD. Here’s what I recommend if you’re on a lower budget:

Samsung 960 EVO Series – 250GB PCIe NVMe – M.2 Internal SSD (MZ-V6E250BW)

If you’re willing to spend a bit more on getting more benefit from your SSD, I recommend the larger storage options so that you can install additional software you might not use as often on your primary drive:

Samsung SSD 850 EVO 500GB, MZ-75E500B_EU

And the M.2 SSD that I personally use:

Samsung 960 EVO Series – 250GB PCIe NVMe – M.2 Internal SSD (MZ-V6E250BW)

Improving Import Options Application Speed

Whenever the import settings of an asset are modified, you’ll experience a wait time. This is because Unity® will not only be cycling through files to update the asset data in storage, but it will also update the asset where it’s referenced, such as the scene, and will be performing multiple other operations. That means that and upgrade to your storage device read/write speed and to your processor both can have a significant impact on this update speed.

To give you a real world occurrence of this, I’ve had personal experience improving the speed of changing import options. For example, when I changed the borders of a sprite I used to wait much, much longer than you would expect while a green bar inched its way across my screen. After I upgraded to a Kaby Lake i7 and an M.2 SSD, the loading bar no longer appeared. The operations were actually performed so much more quickly that the load times were no longer displayed. Here is the processor I upgraded to, as well as the M.2 SSD I upgraded to which I mentioned in the previous section:

Intel 7th Gen Intel Core Desktop Processor i7-7700K (BX80677I77700K)

Improving Asset Importing Speed

Have you ever downloaded a large package from the asset store, and waited ten minutes or more for it to import? 3D assets or audio are good examples of assets that can cause these wait times, and we can make it happen faster with an upgraded SSD, as that is where the bottleneck lies since we are saving many files to a location on our HDD or SSD. You’ll want one of the SSDs that I recommended above in the Improving Unity® Startup Speed section. There is also some performance upgrade to be made with upgrading your processor, as Unity® will perform various actions across the Editor. Here is the processor I currently use:

Intel 7th Gen Intel Core Desktop Processor i7-7700K (BX80677I77700K)

And my M.2 SSD:

Samsung 960 EVO Series – 500GB NVMe – M.2 Internal SSD (MZ-V6E500BW)

I also recommend looking at the above recommended SSD options if you don’t have an M.2 port on your motherboard, or if you don’t want to invest too much in an SSD.

Improving Game Build Speed

Building a game consists of compiling code and assets into an executable program that will become your end user’s experience. In short: a lot of stuff happens. Game builds will almost always have some notable wait time to them that lengthens as you add more code and assets to your game. However, you can speed it up very noticeably with the right CPU upgrades.

I would recommend an Intel processor from the 6th or 7th generation. You also have the option of waiting for 8th generation, which is rumored to have a more potent performance upgrade than the 7th generation line and be release around the end of the 2017. I suggest sticking with an i5 or i7 if you want a good boost to your build speed. If you decide to settle with a 6th or 7th generation, here are my recommendations, from lowest price to highest:

Intel Core i5 6500 3.20 GHz Quad Core Skylake Desktop Processor, Socket LGA 1151, 6MB Cache BX80662I56500

Intel Boxed Core I7-6700 FC-LGA14C 3.40 GHz 8 M Processor Cache 4 LGA 1151 BX80662I76700

Intel 7th Gen Intel Core Desktop Processor i7-7700K (BX80677I77700K)

Improving In-Editor Gameplay Performance

One important thing to know about Unity® is that games running in-editor are more resource intensive than running an executable or ‘built’ game. To ensure you have strong performance testing your game, I recommend installing a high end video card and processor. You can view the processors I recommend just above this section, and I recommend purchasing an NVIDIA video card from the 900 series or higher tier. Personally, I use an MSi GTX 950 2GB Memory video card. I recommend any of the following cards:

EVGA GeForce GTX 1050 Ti SC GAMING, 4GB GDDR5, DX12 OSD Support (PXOC) Graphics Card 04G-P4-6253-KR

MSI Computer Video Graphic Cards GeForce GTX 1050 TI GAMING X 4G

Gigabyte GeForce GTX 1060 Windforce OC 3GB GDDR5 Graphics Card (GV-N1060WF2OC-3GD)

All of these cards are from reputable brands and will give you the performance you need to test your game in the Editor.

All right, these are the most notable parts I recommend upgrading if you want to improve the performance and speed of the most notable operations you’ll be performing in Unity®. If you have any questions about hardware compatibility, or further need assistance choosing which parts to purchase, drop me an email at bilal@xenfinity.net.

With that said, I’ll see you in the next post, or maybe on our YouTube channel!

Until next time,



Visual Studio 2017 Keybindings – Best Keyboard Configuration For Unity® Programming

Visual Studio 2017 Keybindings – Best Keyboard Configuration For Unity® Programming

Visual Studio 2017 is currently the most robust IDE to use for programming with C# in Unity®, and is the most commonly used IDE in general game development. That said, it’s good to know how to set up the most efficient workflow for yourself when using it, as Visual Studio comes with some unintuitive functionality out-of-the-box.

In this article, I’ll show you the most important features to use in Visual Studio 2017, and I’ll show you which keybindings I use to become the most efficient Unity® developer I can be.


Setting Keybindings

Before I tell you all of my settings, you’ll have to know how to set keybindings. If you already know how, you can of course skip this section of the article.

To set keybindings in Visual Studio, you’ll have to open the Tools menu, then click Options, then collapse the Environment drop-down menu, and select Keyboard. The interface that you pulled up will now allow you to search commands by name and assign a key to them.


Comment Toggling

The most hilariously missing thing in Visual Studio is the inability to toggle comments in and out. If you’re unfamiliar with this feature, you’ll want to use it mostly to test certain features by enabling or disabling certain lines of code. It’s much more efficient than deleting lines as you can just leave the lines where they are, set them as a comment, and then uncomment them when you want them to run again.

To enable comment toggling, you actually have to install a plugin, which is very simple. Personally, I use the ToggleComment plugin which you can find here.

Function Navigation

A common feature among IDEs is the ability to quickly position your typing cursor at the header of a function. Visual Studio includes a next method and a previous method command to which you can bind a key. Here are their respective commands, and the keys I’ve bound to them:

Command Name: Edit.NextMethod

My Keybinding: Ctrl+Alt+Down Arrow


Command Name: Edit.PreviousMethod

My Keybinding: Ctrl+Alt+Up Arrow


Viewing Declarations 

This next command is used for jumping the typing cursor to the declaration of a referenced member. By default, Visual Studio has this command set to F12, which for me is annoying to reach over and press. I recommend changing it to something you can press with your keyboard hand as you will likely want to look at the definition of a function often when debugging. Here is my binding:

Command Name: Edit.GoToDeclaration

My Keybinding: Ctrl+Shift+D


Viewing References

You can also view the references of a member just like you can its declarations. Once you send this command, it will display a list of every line in every file where the selected member is referenced or used. Here is my binding:

Command Name: View.ShowReferences

My Keybinding: Ctrl+Shift+R


Selecting Words 

This command isn’t really as important as all the others, but it can come in handy once in a while. The select word command will select the word your typing cursor is currently in or adjacent to. I’ve set mine as follows:

Command Name: Edit.SelectCurrentWord

My Keybinding: Ctrl+D


Navigating Tabs

This part is straightforward. When navigating through tabs, the “next” tab is to the right of the currently selected tab, and the opposite for the “previous” tab. I’ve also rebound the close tab key. Here are my configurations:

Command Name: Window.NextTab

My Keybinding: Ctrl+Alt+Right Arrow


Command Name: Window.PreviousTab

My Keybinding: Ctrl+Alt+Left Arrow


Command Name: Window.CloseTab

My Keybinding: Ctrl+W


All right, those were the commands I find most important to keep accessible as I use them the most when working on games. Each time you employ things like this that speed up your workflow, you’ll become a bit more efficient since you’re able to focus more on your code and game design. Thanks for reading, and I’ll catch you in the next post!



Procedural Meshes in Unity – Creating Enemy FOVs Part 1

Procedural Meshes in Unity – Creating Enemy FOVs Part 1

Hello everyone,

I’m currently working on a game in which a stealth mechanic based on enemy fields of view (FOVs) will be included. To implement a visualization of these FOVs, I’ve used procedural mesh geometry, or a fancy way of saying shapes created manually through lines of code, as well as some math.

Since I never needed to manually generate meshes in Unity before, I had to search around for answers on how to do so, which took me longer than it should have. While it didn’t take long to find general answers on mesh generation and general answers on the math required for certain shapes, I spent more time than I think anyone should have to for a common feature in video games.

Since this site is all about bringing complete clarity to concepts that may be lacking in explanations, I will write a series of posts about implementing fields of view, each consisting of one of the following concepts: generating procedural meshes, generating and applying a texture to a 2D cone mesh, and implementing field of view detection of the player.

In this post, we’re strictly going to be talking about creating meshes with code in Unity, including setting vertices, triangles, and others.



When generating a mesh in Unity, the two biggest things we need to worry about are vertices and triangles. The purpose of each can be straightforward, but to clarify, vertices are points along the circumference of our shape just as any vertices, and triangles are used to represent the surfaces of faces of a shape.


Just like any geometric shape, the size and shape of the faces are dependent on the vertices, which means that our triangles are dependent on the vertices. For example, to create a square, we’ll need four vertices equally distant from each other to represent a face, which of course would look something like this:


Now, to define the surface of the face we just conceptualized, or its visual representation, we’ll want two equally sized triangles with hypotenuses facing each other. We need our triangles to look like this relative to our vertices:


In the illustration, the red and green triangles represent the two triangles used to represent the face on our mesh. You’ll also notice the red and green numbers next to the vertices which represent the indices of the vertices used as the vertices for their respective triangles.

To clear up what that means, we have to understand the technical of the vertices and triangles data structures in Unity. Vertices are of course represented by an array of vectors representing positions of vertices stored by index.



Triangles are a little bit less straightforward as they are represented by an array of integers. Basically, every three integers in the triangles array represent one triangle with vertices referred to by index in the vertices array. Here’s a quick illustration of how it works:

proceduralmeshillustration3As you can see in the picture, three elements from the triangles array group into one triangle with points referenced from the vertices array by index.

Putting it in Practice

If you want to try this out for yourself, create a GameObject with a Mesh Renderer component and a Mesh Filter component, write a script that creates a mesh, and assign the Mesh Filter’s mesh attribute this newly generated one. You’ll need the following lines of code:


private void Start() {

Mesh square = new Mesh();

Vector3 topLeft = new Vector3(0, 1, 0);
Vector3 bottomLeft = new Vector3(0, 0, 0);
Vector3 topRight = new Vector3(1, 1, 0);
Vector3 bottomRight = new Vector3(1, 0, 0);
square.vertices = new Vector3[] { bottomLeft, topLeft, bottomRight, topRight };

square.triangles = new int[] { 0, 1, 2, 0, 2, 3 };

GetComponent<MeshFilter>().mesh = square;



After running with this code, you should now see a newly generated (hot pink) 2D square mesh in your game!


By the way, I’ve uploaded a video all about creating procedural meshes to create custom shapes on the Xenfinity YouTube channel! Check it out here:

Until next time,


How to Start a New Game Project

How to Start a New Game Project

You’re thinking about your next project. Everything seems great, and you’re just about to jump in with all of the passion, excitement, and dedication to this project you think is going to be amazing. At this point, if you’re lucky, you’ll start thinking about everything you need to do before you make the project, and thoughts like these might start popping up in your head: “So I’m going to need to generate over 50,000 items and optimize it? Wait, I need a master server? How can I even manage creating all the assets?”

If you’re like me, you’ve experienced starting a project before you’re ready on multiple occasions. There are just so many factors in the world that can cause us to re-evaluate what it is that we want to work on, and that can be dangerous. With so many possibilities out there, you might start thinking, “What if I integrate Facebook SDK, Unity Analytics, Unity Ads, Google Play Games, Everyplay, oh, and multiplayer, and how about that feature my friend suggested…”

You can probably guess everything wrong that’s going on here, but let’s inspect every aspect of what’s going on with this thinking, and how we can fix it. Personally, I notice that there is a lack of appropriate scope for the team size, the end product lacks clear definition, a timeline can’t be deduced, and therefore, this is an example of starting before you’re ready. I’d now like to cover all the things that you should do before you start your next game project.

1. Define Your Product


Before you work on a game, you want to make sure you know exactly what you want to make. I know it sounds a little ridiculous, but the fact is that we often can start a project, and only have a vague idea of what product we’re going to end up with. This is very dangerous behavior, as it can have you wasting days, weeks, or even months on a project you might have to scrap or repurpose all because nobody took the time to figure out what the purpose of the project was.

To define your product, you’ll want to take a moment, and let you brain run for a bit, and observe what it comes up with. Imagine playing the game that your brain has invented, and experience that excitement. Once you know what you’re passionate about in your next game, outline a few features that define it, and you’ll know what it’s based around. For example, when I created “Rebound,” I decided that I wanted to be bouncing a ball within bounds of a screen, defeating enemies, and grabbing power-ups, with the purpose of survival.

2. Scope Down to Your Resources

Scoping down is a huge factor when it comes to conceptualizing a project, because it’s about determining what you can get done within a certain time period. Before I get into this anymore, let me say that games like Grand Theft Auto, Skyrim, and Call of Duty are made by huge teams, additional outsourced assets, and driven by large companies. I don’t say this to belittle indie developers and teams, but I want to provide realism to this subject so that you can truly succeed.

You need to scope down your project to something that you can achieve within a realistic time period by knowing your resources and your team size. You’ll want to reflect on work you’ve already done to figure out how long it takes you to make a certain type of feature. For example, how long will it take you to set up player input controls? How long will it take for all the sprites to be completed? Questions like these can be very productive in figuring this out.

When you scope down your project, you’ll want to make sure this is still what you want to make. I suggest against creating very small games or clones just for the sake of getting a lot of players. To scope down and still make the game you want to, consider the main features of your game, and ensure they are highlighted and continue to be the purpose of the game.

3. Determine Required Assets


On the topic of time, you’ll want to determine all of the assets and content required to build your game. This is really easy if you’ve already decided everything you want in the game. For example, if we have 10 enemies in the game, 5 of which are lizards, 3 of which are ghosts, and 2 of which are zombies, it’s pretty clear what you’re going to need in terms of sprites. You can expand this into, for example, animations by outlining all of the actions the enemies may perform.

After you’ve determined everything you need, find out what you need to make. There are lots of free assets out there, and already written code that cover many of the features you may want to include. There are lots of free UI sprites that can help you get a prototype UI up in seconds, and your game will already start to look like what you’ve been imagining. Never fall into the trap of thinking it’s cheating, shameful, or useless to re-use assets, especially not for a prototype. You’ll only want to avoid re-using assets in a final product where the assets simply do not fit the art style or context, but that’s a topic for another discussion.

The Unity Asset Store is of course a very powerful tool for obtaining assets that you can use to prototype your project.

4. Create an MVP

Creating a Minimum Viable Product outline is my last step before starting any new game, web app, or other software. An MVP is an outline for the absolute minimum required to launch your game or application.

Within your MVP, I suggest including abstract details, such as the game description in two sentences or less, the kinds of characters or actors in your game, how your game plays through, and even more technical details like the classes and other data structures you’ll need, as well as their members, or functions and variables. I highly recommend making one of these before you begin your work, as it can get you started much faster than going off the top of your head.

When you make an MVP, don’t worry about whether or not the data will change in the implementation because it will. You’ll just want to include as much stuff as you can before you begin so that you can get an idea of how long you’re going to take, and the amount of work you’ll have to do.

Here is what the MVP for my next project looks like.

It’s very basic, and I always have more stuff to work on than just what’s in the MVP, but I share this to provide some structure and visual aid for understanding an MVP.

5. Get Started


So you’ve outlined everything, you know vaguely how long your project is going to take, and you’re feeling ready to start pumping out some work. At this point, you’ll want to get through everything in your MVP as quickly as possible so that you can discover any changes as soon as possible. Once you find these changes, make sure you’re open and ready to address them, especially if they will end up lengthening your timeline. Make sure to grab any pre-made assets you can use, and reuse old code and other files. Beyond that, you can continue your work as you normally would. Good Luck!

How To Save Your Game In Unity with XML

How To Save Your Game In Unity with XML

Download the project files for this video here!

Hello everyone, and welcome!

In this video I show you how to create save game files in Unity using XML serialization.
This method is really easy to expand upon, and will allow you to easily create save files using whatever
information you want to store. Using XML is especially great for small teams and small projects because it keeps everything simplified and easy. However, XML documents are text documents, and, for large projects, can cause longer loading times.

Whenever I think about saving data in a game, I instantly think of all the data I’m going to have to store. After all, in programming, you want to make your code as reusable as possible to not only make multiple jobs easier for you, but also to stay organized for yourself and possibly others. So I decided I would want to use a generic class, in this case “Actor,” to allow any character or GameObject involved in the game to be saved if I want it to. The method I use in the video will make you have to spend minimal time worrying about saving or making any additions to the saving functions.

Moving on, you can improve upon the performance of this script using ID checks so only certain values have to be replaced in the xml. I also recommend using an object pooling system upon spawning serializable actors or characters.

I hope this helps you, and make sure to enjoy the video! 😉

P.S. Let me know what other topics you want me to cover in the comment section below!

How To Use Xbox 360 Controls In Your Unity Game

How To Use Xbox 360 Controls In Your Unity Game

Hello everyone,

In this next video, I decided to show you how to implement support for Xbox 360 Controllers in Unity. This will only work properly when using Windows, as Linux and Mac computers require different settings. For all the details on the required settings, you can visit this page on the unity wiki.

In the video, I walk through setting all the required values for the controller in the input manager, and then perform tests to make sure all the input settings are working properly. Hope it helps with your projects!

Make sure to watch the video for all the details, like proper sensitivity and dead settings for thumbsticks, triggers, and buttons (they do matter)! You can get the project files here, or just the input manager with Xbox 360 controls already implemented here.



How to Create Basic Character Movement In Unity

How to Create Basic Character Movement In Unity

Hello everyone,

I just uploaded a new video about how to implement basic character movement in Unity. In this tutorial, I use a rigidbody to apply a certain speed per second for a character. More details in the video. Hope you enjoy!

Project files available here.



How To Create Smooth Camera Movement In Unity

How To Create Smooth Camera Movement In Unity

Hello everyone,

In Unity, one of the first things you might end up doing for your game is trying to figure out why the camera seems a little stiff. There can be a lot more for a camera to do than just move positions or follow a character. You might want to apply some effects, such as a smooth following effect, to your camera so your game looks more interesting and your character gives off more of a moving effect.

To achieve such effects, you’ll probably want to use Linear Interpolation and Delta Time so make your camera change positions smoothly over a length of time. More details in the video. Hope it helps!

Project files available here.