Game Art With The Unity Asset Store

With such a limited amount of time to meet the launch deadline for Couch Heroes vs The Dungeon for the new Apple TV, we had to look into Unity’s Asset Store to be able to quickly assemble our ideas for art style, gameplay and overall feel. The Asset Store is a marketplace for Unity developers to create and sell their creativities, but for us it was a gold mine of useful tools to rapidly prototype and assemble a new game.

Here are four things that we did to make Couch Heroes vs The Dungeon happen.

Know your needs

The Asset Store can be daunting with thousands of “free and paid-for 3D models, editor extensions, scripts, shaders, materials, audio files, animations, and more”, but knowing what your game needs to get things started makes the search a lot easier. For us, we knew Couch Heroes would be in a dungeon, so we found a modular dungeon set that allowed us to piece together our dungeon the way we wanted it to look. We also knew we needed our heroes and some monsters, so once we decided they should be low poly caricatures, finding the right assets was simple. With those asset packages available, the game went from prototype “programmer art” to an almost finished looking game.

Customize to make them cohesive

Original downloaded assets pieced together

Almost looking like a finished game and actually looking like one is still a big leap for an artist. The asset models may work together, but because they were created by different developers, the texture work didn’t flow together as well as if one art team had made it. So after a few retexturing tests on some dungeon walls and floors, we decided the direction to go for everything else. Not everything needed to be retextured, mostly larger objects that had a lot of screen real estate; there’s no need to spend time on redoing something that is hardly noticeable after its been changed, so pick carefully. For the Heroes we went with a 5-6 color palette to simplify their texture and pop them off of the environment, as well as make the silhouette of the models do most of the work.

Assets after retexturing
Assets after retexturing

Bang! Pop! Wow!

Lights, particles, screen effects and flashy animations are all awesome to have and really add to gameplay and experience. We used one main Directional Light casting shadows to set the basic mood, then small Point Lights for additional effects for when a monster is destroyed, or for when a player turns into a ghost; they work really well as little flashes of light, used with particles. Our screen effects only consist of a Vignette, blur/depth of field around the edge of the screen and screen overlay to make the center gameplay area more vibrant. This allows focus to be brought to the character and add a little more depth to the dungeon. As for particles, we used the Unity Asset Store again to find a cartoon pack with a lot of great FX used for enemy impacts and deaths.

Optimize for performance

Mage with 512 simplified texture (left) vs 2048 detailed texture (right) - 2.5MB difference
Mage with 512 simplified texture (left) vs 2048 detailed texture (right), a 2.5MB difference

Because we used a lot of purchased assets, not everything was as optimized as it’d be if we had made it in-house. But there’s also not much you can do without spending a lot of time reworking the models and their UVs. What you can do, though, is make sure your static objects are being batched properly and objects and lights that don’t need to cast shadows aren’t. Also, we found that Unity’s default frustum culling didn’t seem to benefit our performance stats, so we set up an LOD Group on objects to ensure that they aren’t being rendered when they don’t need to be.

Visualization of how the LOD Group works with camera distance

With more simplified texture style, we were also able to lower the texture resolution on a lot of the environment and characters. The best way to do this is keep your original source file large, but change the import texture setting size in Unity to be smaller; this will be a personal preference to find the best quality for your game, but lowering the texture sizes can greatly increase performance.

Apple, Apple TV, iPad, iPhone, Siri Remote and tvOS are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.

Procedural Map Generation

How To Do It Well, Based on the Needs of the Game


One of our first major design decisions on Couch Heroes vs The Dungeon was to generate each level procedurally. This was partly because we wanted the experience to be highly replayable, but also because creating levels by hand can take a lot of timewe didn’t know how much time we had before Apple would tell us to submit our game for the tvOS launch. We had done some previous work on procedural map generation in a different project, so we applied what we had learned to this new scenario.

In Couch Heroes we have a grid layout where each point on the grid is a single, small square that can contain one environmental item—for instance, an enemy spawner or loot pickup.

Screen Shot 2015-12-02 at 2.12.15 PM
Points as squares.

However, our previous work was kind of a different beast; those efforts involved generating a grid where each “point” was a actually large town square. Each of these large squares contained an inner courtyard area surrounded by buildings and paths, where each courtyard, path, and building was randomly chosen from a pool of handmade objects. On the one hand, the town square method guaranteed that we would have wide-open spaces, which are excellent for handling the chaotic swarms you get in a top-down shooter, and allowed for each space to be at least a bit different from the one adjacent to it. But on the other hand, this approach was very limiting when it came to level variation because each town square had an identical layout and creating each portion of the square required a lot of work from artists. Plus, paths needed to be lined up with those in adjacent squares in order to prevent them from running into the back of a building in the other square, so generating a random border layout proved to be surprisingly obnoxious.

It was pretty clear that things had to be done differently this time, and so we used a more generalized method. This method created a grid system where each grid point was truly a single small point rather than a large area, which allowed for far more variation in each generated layout.

The Basic Algorithm

Path Sobriety

We start with a “drunken walk”, which begins at a starting position and randomly moves around the environment. The algorithm is constrained by the grid’s boundaries and chooses to turn or move forward based on a given “straightness factor”, which pretty much equates to whether the algorithm is more sober (straighter line) or drunk (lots of turning). The result is a single path weaving throughout the grid.

A “drunken walk” through a less sober path.

Creating Rooms

At this point, the world is still pretty empty and so the next step fills the voids untouched by the path by placing rooms of semi-random size in several of the untouched areas. The rooms then need to be connected to the path, so we look outward from each room in order to find the nearest adjacent room or path and then create a new path from the current room to that point. The catch here is that one unconnected room can connect itself to another unconnected room and vice versa, meaning that even though both rooms are technically connected to something else, they are only connected to each other and neither is connected to the main path.

Then, we have to make sure that each room is reachable by the player, which we do by using an A* search to walk from each room back to the level’s starting position and adding a new connection whenever a valid path can not be found.

Final Touches

Now that the floors are generated, we fill the spaces with other environmental objects. Doors are placed in points that stand between a large area and a small one, like where a hallway meets a room. Destructible objects are placed on points that lie within a room and border a wall. The exit point and resurrection tower are placed in different semi-randomly chosen rooms; in the case of the exit’s room, preference is given to a room that is furthest from the entrance. Enemy spawners are semi-randomly placed in various rooms and loot pickups are sprinkled around the environment.

There you have it: a map generator capable of creating levels with enough variety to provide players with a unique experience whenever they play. Happy dungeon crawling!

Apple, Apple TV, Siri Remote and tvOS are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.

The alcoholic figure is by Rflor from the Noun Project.

Sprinting to tvOS (Tips and Tricks)

In 2010 I went to my business partner’s house and gathered around the dinner table to crunch over the weekend because we had learned that we would be a launch title for the original iPad. My partner had to be on a plane to Cupertino to test the app on the device in about 72 hours; we had to get it done, and we did. About six weeks ago, we found out that we would get one of the few developer kits from Apple for the new tvOS. With a blurry deadline we committed right then to develop and release a game for tvOS; come hell or high water it was going to happen. The only problem was, this game wasn’t going to be developed in a vacuum; we had our regular projects and clients that we had to continue to serve. We gathered the team and informed them of the opportunity and the idea, and asked for volunteers; it was going to be a nights-and-weekends, run-and-gun effort.

Screenshot 1

What we had on our side was a team of dependable programmers, designers and artists who are 100% committed to what they do. We also inhabit a unique environment in Durham, North Carolina called The American Underground. The AU allows entrepreneurs and developers like us to pivot to meet challenges without the worry of how deeply it’s going to effect us six to twelve months down the road.

Here are six things that we did to make Couch Heroes vs The Dungeon happen.

1. Determine A Minimum Viable Product

How do you eat a whale? One bite at a time. Our list of must-haves for the game was limited, to say the least. When the first SCRUM was done we had three things on the whiteboard. A minimum set of features makes the goal achievable.

2. Make It Playable

From the beginning we knew, that to hit our deadline the game would have to be playable from start to finish. We created all the screens, rudimentary level art and characters, effects, and game play in the first week.

3. Write Tickets

We wrote tickets for every detail, idea, and task in the project so we didn’t lose track of who was doing what or any “nice-to-have” features that popped into our heads.

4. Iterate, Polish and Cut

Cutting features can be painful, but it can be very satisfying. Trimming the fat and polishing constantly creates a streamlined experience for players and each tweak improves the game holistically. And, the good ideas naturally rise to the top. Once the game was playable from end to end, we iterated, tweaked and polished.

5. Fail Early and Often

Don’t be afraid to try something and don’t take it hard if it doesn’t work. Rapid iteration allows you to find out what works and what doesn’t.

6. Count On Your Team

At Third Track, we have always adhered to the philosophy that we are all adults, we can figure out what needs to be done, and we can make it happen.

Apple, iPad, Siri Remote, and tvOS, are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.