Unity Game Design and the Question of the Asset Store

Akonus is the name of the project I’m building. When finished, it will be a role-playing game set in the Eclipse Phase universe, a near-future science-fiction horror story about humanity on the edge of extinction and the desperate fight to prevent that eventuality.

Aknous Character Selection

The idea came to me while playing Elder Scrolls Online, a game I’ve come to really enjoy for it’s both it’s size and gameplay. I realized that while I like ESO, I’d really love to be playing an Eclipse Phase game. Which doesn’t exist. So, why not build it myself, I thought.

A Huge Undertaking

I was well aware that it would be a huge undertaking. I had used Unity a great deal during a previous attempt to create a game in 2015 and 2016. But there had been quite an interval, and Unity had undergone a number of changes. One of those involved dropping support for scripting in Javascript, a language I know. Unity now only supports C#, which isn’t a language I’d had any real experience using.

The truth is that most commercially released games are completely coded by the team building the game. This often means developing the underlying game engine from scratch. Plans for these games are meticulous and all of the various systems that will be needed are coded from these plans.

Asset Store to the Rescue

Unity Asset Store

That’s great for professionals, people with experience and skill in game design and development. I am not that person, so the natural conclusion was to go shopping at the Unity Asset store. Unity is free for developers who make under a specific threshold from their work. $100,000 or less, I believe. It has a number of built-in system to achieve your goals. But independent developers can offer code, artwork, 3d models, and audio for anyone to buy on the Asset Store and use in their projects. As of June 2, 2020, there are 60,412  assets on the store. Some of these assets (6,007) are actually free and their are Youtube tutorials* that show how you can build a working game without paying a dime.

Many of the best assets are not free. Almost 96% of the assets on the store cost $50 or less. The most expensive is a video playback package that lists for $3,500.  Some of them are painful overpriced, while others are amazing bargains. There is a review system to help guide shoppers, but many of the actual reports aren’t terribly reliable. And it’s possible to get a refund under some circumstances.

Some of these assets are just ready to use. Audio, whether it’s music, sound effects, or voices can be dropped into a game and used right away. 3d models might have to be tweaked before being usable. But the most important assets, in my opinion, are game C# code for major systems.

One example would be a character controller. Players may not realize how much work goes into moving their character around in a game world. Controllers aren’t difficult to create, but to make one that fits the design requirements of a specific game takes time, experience, coding skill, as well as patience. And if you’re new to the whole process, they can be a bit overwhelming. The simple solution seems to be finding and buying a package that handles controlling a character.

There are more than a hundred character controllers available on the Asset store. Some focus on First Person Shooters. Others on a variety of third-person type games, over the shoulder views, or perhaps a top down perspective. And this is where reality intrudes. Even the best of the available controllers are not going to work without some level of customization.

Maybe Not so Fast

I quickly discovered that getting the game I want would require a lot more work than I originally thought. I could adapt my design to fit the code, or I could figure out how to adapt the code to fit my vision. I’m going with the second option, which means I rely on the asset creators to support their product with good documentation, tutorials, and an active presence in their support forums. And this can be hit or miss.

So, I’ve learned not to buy a package on the asset store without thoroughly investigating several key questions. What do the reviewers who actually provide details saying about the asset? What does the support forum look like? Is the developer actively answering questions and providing guidance? Is there complete documentation? Are their tutorials, written and/or video?

Keep in mind that in almost all cases, you’ll have access to the actual scripts used in an asset. Even if you don’t use the asset itself, you can learn an enormous amount from reading through this code. And that, in and of itself, may be well worth the cost.

[*]If you’re looking for video tutorials, I highly recommend these specific Youtube channels:

 

Growing Past the Plateaus

I’m fascinated by the process of learning. Since the end of my college days in the Eighties, I’ve taught myself a number of things, and I’ve learned a bit about the process. I’m especially intrigued by the process of plateau followed by progress, slowly climbing a ladder of comprehension as I dive deeper into a subject.

It was easy to see that process as I was learning to play the bass guitar over the last six years. When I first bought a bass, I already understood music theory. I knew how the notes I was playing (or trying to play) fit into a song’s overall harmony and I understood the function of rhythm. But that knowledge was a far cry from playing a favorite bass line without missing a beat or a note. I’ve come a long way from those first painful-sounding notes. I’m no virtuoso today, but I can hold my own. And I love it.

The process hasn’t been quick. Over the years, I’ve hit many plateaus. These are times when I would continue to practice, but not seem to improve. Frustrating. And sometimes I’d give up for a couple of days. Then, when I picked up the bass again, I discovered that I’d been able to move on. I could nail the passages that were too difficult to master only a few days earlier. Progress after the plateau. 

And it’s always the same. I’m working now to master my coding skills with Javascript. I’ve been coding as a hobby for nearly forty years, starting with BASIC when I first got a Timex-Sinclair 1000 in 1982. Since then, I’ve learned a number of languages to some degree or another, including Pascal, Visual Basic, Java, C#, and Javascript. My current focus is Javascript, and once again, I’m seeing the plateaus and the progress.

My most recent plateau involved incorporating modules into the code for my Eclipse Phase website. I had been creating a new script file for each system I wanted to incorporate. It’s a practice I’d learned with other languages, and I find it a lot easier to manage multiple, shorter script files than one enormous file. One function, creating random names from a database of hundreds of possibilities in more than twenty languages resulted in a very large script file. Including the random name function, and everything else, into one script file, just felt overwhelming. Even with bookmarks, finding the code I wanted to work on was a daunting thought. But, Javascript doesn’t necessarily work well with so many script files. 

What to do? My solution seemed to lie in using modules. In Javascript, modules are script files that can share their functions and variables with other scripts. Okay, I thought, that’s what I want. I can separate out my random names code simply share the randomName() function with the other scripts that need it. What I didn’t know was that modules impose ‘strict mode’ on the code. 

Javascript CodeIt’s important to note that learning on your own means you can’t just raise your hand to get an answer to a question. I’m relying on a few books and a lot of google-foo to get the answers I want. It’s often a pain. I can ask Google anything I want, but Google only responds with what it thinks the answer to my actual question might be. So when I modularized my code, it took me a couple of days to figure out that ‘strict mode’ didn’t like some of the ways I was doing things. And after all the work I’d done to get the site working, I felt deeply frustrated. Functions that had worked before now showed up as ‘undefined’ and buttons necessary for the site no longer worked. 

So, I had to learn another way to achieve my goals. When I couldn’t find an answer, I posted a question on Stack Overflow. Within a few hours, I had my answer. I had no idea that using onclick in HTML was considered bad form! But now, instead of onclick’s, I started using .addEventListener. Hurdle overcome,  I’m moving ahead with my project and anticipating the next challenge. Bring it on, Javascript, bring it on.

Learning Feeds the Mind

I love learning new things because learning feeds the mind.

Growing up, my brother played the trumpet and after college, he learned to play the guitar. I was always intimidated by musical instruments. I was never musically inclined, but inspired by my musician friends,  I wanted to learn. I discovered MIDI, bought a keyboard and plugged it into a computer. All I could do was plink the keys, but once it was hooked up to a software sequencer, I learned enough musical theory that I could create music. Some of my work is right here on this site.  In 2014, I started learning to play the bass guitar. Over the years, my little Hofner has been a joy.

The Glory of Rome

The Glory of Rome

In the Nineties, I became fascinated by ancient Roman history. I spent long hours reading everything I could find about the rise and fall of the Roman Republic. I learned about the history and intricate nature of that brutal society, its odd quirky traditions, its hardcore military, and the particularly vicious political system that makes modern American politics pale in comparison. That inspired me to create an online game, The Glory of Rome, which gave players an opportunity to lead a Roman noble house during the last century of the Republic.

The Glory of Rome

The Glory of Rome

I was an early adopter of the internet. I originally was an AOL subscriber, and when they started allowing users to create web pages, I was all in. Building a page back then was a clunky, ugly affair. But I learned what I needed to know to do what I wanted to do. Over the last 25 years, I’ve built quite a few sites, always learning what I didn’t know to do it passably well. I picked up bits and pieces of the developing HTML spec and the newer technologies of CSS, Javascript, and various extensions like JQuery.

Now, I’m taking that to a new level. And it’s a good thing that I like to learn. The first thing I recognized as I approached this new endeavor is that the field has exploded with new technologies and options. It’s overwhelming, and the more I dig into it, the more there is to know. I’m focusing on improving my skills with the three core technologies: HTML, CSS, and Javascript. Every day brings new opportunities to learn. And my understanding of what I’m doing with the code is growing.

 

JavaScript Code Snippet

I learn best by doing, and with that in mind, I’m building a new web app. The goal of the site is to provide inspiration to players of a science-fiction roleplaying game. The exterior challenge is to create a dynamic and interesting narrative tidbits to prompt users’ imaginations. The interior challenge is to figure out how to deliver that to the users. The HTML must be well structured, the CSS must create a modern visual ambiance that supports the theme, and the Javascript must be crisp and efficient.

I love learning new things because learning feeds the mind. I want to be a professional coder. I don’t know why lies ahead, only that I’ve got work to do to reach that goal. Bring it on.