Asset Bundle #9

It’s finally time to release – the core of Asset Bundle #9!

As long time readers already know, I’ve been working with asset bundles for years. I finally got around to packaging up the core system that I’ve been solving problems with so that others can benefit from what I’ve learned.

You can learn more about it’s technical abilities from the developer site: http://bundle.dwulf.com/developer.html
And then to convince your boss to let you buy it, there’s a section of the site for them too, to make it easier to explain why you need it. http://bundle.dwulf.com
And then go buy it from the Unity Asset Store! https://assetstore.unity.com

This is the core – the part that actually downloads bundles and unpacks them. It’s currently compiled for current Unity versions, but can absolutely be rebuilt for older versions once purchased.

Over time (or based on interest) I plan to release template projects that demonstrate how I use this core to accomplish the things I talk about in my blog series about asset bundles. Want a refresher?

Hope to hear from you about questions and how you are doing neat things with it!

ModernCoalition

logo

  • Product description: Free-to-play “Group Decision” game for iOS and Android
  • Release Date: December 2015
  • Website: ModernCoalition
  • Product history/genesis: A startup focused on improving voter engagement
  • Team: Small group, ten total
  • Core Technologies: C# in Unity3D with a .Net based server
  • Most proud of: Implemented majority of project in roughly two months
  • Responsibilities: Client and Server coding

In March 2015 I was laid off from DeNA, just a few days after releasing Marvel Mighty Heroes. This was the end of an era for me, over a decade. I worked my way up from an independent developer porting Windows games to Macintosh, to writing next-gen cross platform games on mobile.

During the previous era, each opportunity was offered to me, without really having to “reach” for them. But this layoff was a hard stop. I had no idea what I was going to do next. I really thought I was out of the game development business. All the work I’d done was remotely for other companies. Where I live, there aren’t any game companies. And, other than the people I worked with, nobody had any idea I existed. I liked to joke “I’m the best game coder nobody’s ever heard of.”

I don’t recall how exactly this startup had heard of me, but we connected just before my layoff, asking only for counseling. They were not a gaming company in a classic sense, but one that was working on solving a problem by making a game. The idea was to make voting on issues into a game. One that you had to earn the right to vote for by playing minigames.

After a few months it became clear that I wasn’t finding reasonable options for non-game work where I live, so I offered my coding services to this startup in hopes that it would lead somewhere. The project itself wasn’t particularly complicated, but I did invest in learning enough server side .net to make the gameserver with it.

Eventually we hit a wall with funding, and it was either “ship it or close shop.” With so much of my own time and money invested, I didn’t want to let it go without a fight. In two months I tightened up what we had and shipped a working game to iOS and Android app stores.

In the end we couldn’t get enough players in the game to make it worth continuing, shutting the servers down a mere three months later. To this day I believe that with the right team this project could soar. Until then, adieu.

Marvel Mighty Heroes (iOS and Droid)

App Icon

  • Product description: Free-to-play four player Brawler game for iOS and Android
  • Release Date: March 31, 2015
  • Website: Marvel Mighty Heroes
  • Product history/genesis: Looking for a new game genre, we attempted realtime multiplayer in full 3D and succeeded
  • Team: Varied, largest team was 20. I was one of 5 client coders for most of the project
  • Core Technologies: C# in Unity3D with a Scala-based server
  • Most proud of: New Asset Bundle system that allowed bundle sharing and downloadable scene replacement
  • Responsibilities: Sole implementor of almost all UI for most of the development time; Tool development and support for rest of team.

A month or two before I came on this project, I was given the freedom to start working on taking existing code from our Hellfire project and organizing it so that we could share that basic code across new projects. While I was successful in starting a shared technology stack, it was clear that much more needed to be done to make it solid for other projects to use in earnest. Part of that stack was the Asset Bundle system rewrite.

In Unity3D, the simplest way to publicly download additional content like models and textures is to add them to a Unity-specific container called an Asset Bundle. This feature worked, but was under documented and difficult to use at the time in Unity3D version 3. We had some strong code for working with these asset bundles that was developed by the Hellfire team before I started working in Unity. However, the code was complicated and did not support the sharing of resources between different asset bundles. My goal was to fix that.

While I was working on that shared technology, it was determined that one of our new projects was going to need more client coder help than was available. Therefore when I was brought in, I was still developing that shared technology at the same time as implementing user interface designs in this project that already had almost a year’s worth of prototype work done on it.

I would end up spending most of the project this way, doing double duty as the only user interface developer as well as adding tools to make production easier as well as creating the new asset bundle system to make this large dataset manageable for devices. It was only three months before release that I was able to complete the asset bundle system.

As it turned out, Unity themselves had the same ideas I had about asset bundles. Not a month after completing my system, I learned that Unity 5 was including a new asset bundle system which did exactly everything I had put into mine.

All that aside, this was the most complicated user interface design I had ever attempted. Early in development I made this statement to our designer: “Go crazy, dream up anything you can think of, and I’ll try it. If I can’t do it, I’ll let you know.” Sure enough, I was able to make happen a lot of complicated scrolling contexts and interactions that had not even been dreamed of for the Hellfire project.

We support both phone and tablet devices, iOS’s few resolutions and Droid’s many resolutions, all using the same scene definitions. Each scene was put together based on virtual screen dimensions that scale the interface up but not let it get too “fat” and then use the “springs & struts” style of automated item layout to fill in the differences in device aspect ratios.

Other major improvements over the previous codebase was a new scene loading system, one that no longer assumed only one scene was displayed at a time. To make that happen I also had to rework how scene transitions worked, as well as seemingly simple things that became very complicated like handling the Droid “Back” button. All of this code written from the start with the idea of adding it to the shared technology set that I started with.

This was my largest project with this company, and sadly, my last. After twelve months of my work and just a few days after releasing to the public, I was laid off along with many other people.

Despite the difficulty of this project, I am still extremely proud of the work that everyone did on it. This is one of the projects where every single member of the team knew what they were doing and worked with each other to make it happen.

Resume List

Want to more “classic” view of my work history? Try these. I have quite the long history, so I’ve organized it based on what your interest might be. Also, each one has multiple file formats, so you can pull the one most likely to work for you.

Application Developer

Games Developer

Whole Enchilada (in case you want to see it’s full glory all in one shot)