Unity Version Tool

The latest updates and documentation can be found on the Unity Build Tool wiki page.

One of the biggest problems with having 59 Unity projects is keeping them all up to date.  I knew many of my Unity projects were out of date and needed to be updated to the latest version of Unity, but I didn’t have a good method for detecting which ones.  I had previously developed build and upload scripts in Ruby to create Windows BAT files to compile a project for Windows, MacOS and Linux and upload those builds to Itchio using Butler.  However, those BAT files could not make Unity WebGL builds.

The Unity Version Tool that I developed solves these problems.  It was developed in Ruby using the GTK+3 graphical libraries.

  • Pressing Scan Projects will check all subfolders in the specified project directory for Unity projects.
  • If a project does not match the current version of Unity or PlayMaker, then the project will be highlighted in red.  Default version values can be set in the unity_version.config file.  The version number of the project is checked from ProjectSettings/ProjectVersion.txt and files ending with the .csproj extension.
  • Pressing Update Version will attempt to read the current version of Unity installed on the system (<User Profile>/AppData/Local/Unity/Editor/Editor.log) and store it in the unity_version.config file.  The PlayMaker version information is read from Assets/PlayMaker/Editor/PlayMakerWelcomeWindow.cs.
  • Individual projects can be selected by checking the boxes next to the project names, or all projects can be selected or deselected using the checkbox in the header row.
  • Builds for the selected projects can be compiled for Windows, MacOS, Linux, or WebGL.
  • WebGL builds require a script to be generated from the included template, which is embedded into the project for compilation, since there is not a Unity command line option for making WebGL builds.  It uses the “-executeMethod” command line parameter to execute project script.
  • All builds for a project can be deleted by pressing Clear build folder.
  • By default, the Unity editor will start on compilation.  I may add “-batchmode” as an option in the future to compile without starting the Unity editor, but I’ve noticed issues lately with using the “-batchmode” Unity parameter.  If a project is compiled and it is not using the latest version, then Unity will prompt to update the project.  Therefore, it is advisable to update the projects (which are highlighted in red) by opening them before selecting the compile option.
  • Note that while updating the Unity project to the latest version, there may be multiple .csproj files that still return an old version of Unity.  I’ve found that the .csproj files (such as Assembly-CSharp.csproj, Assembly-CSharp-Editor.csproj, and <project>.csproj) can be safely deleted in most cases, and Unity should create new versions of those files the next time a script is accessed in the Unity editor.  Hopefully, I will add an option to remove old .csproj files.
  • After updating a Unity project, it may be necessary to make a change (such as moving a GameObject in the Hierarchy and moving it back) in order for the ProjectSettings/ProjectVersion.txt to be updated.  I don’t know if there are any drawbacks to manually updating the version number in that file, so I wouldn’t advise doing it.

Using this tool, it is possible to compile multiple project for a selected platform at once.  This is a process that had previously taken me hours or days for WebGL projects, since each project would need to be opened, updated, platform setting changed, and then compiled.  It still takes a long time, but at least now I can kick it off before going to bed and just let it run.

Download the Unity Version Tool  (Ruby and GTK+3 required to be installed on system, which is not included)

Thoughts on First Game Booth at Knoxville Gaming Convention

One weekend ago, members of Knoxville Game Design (Dylan, Joe, Jacob, and myself) had a booth at the Knoxville Gaming Convention.  This was a part of the larger CreepyCon convention at the World’s Fair Exhibition Hall.

I really wasn’t sure what to expect, since we have never done a display at a convention this large.  However, we had some experience with setting up game demos at McKay Retro Game Night, Makerpalooza, Open Streets Knoxville, and Emory Place Block Party.


We had a 20′ x 10′ booth, so I wasn’t sure how much could fit in that space.  I actually simulated the booth space in Unity with simple Blender models the night before to get an idea of how much space we would have.  The biggest estimation error that I made was that we would only have two tables instead of four.  We actually had plenty of booth space, but we were limited by table space.

I had a 18″ x 24″ glossy sign made at Staples with the Knoxville Game Design logo.  I also bought a portable easel there to hold it.  If I had to do it again, I probably wouldn’t have chosen the glossy lamination.  It reflects a lot of light which sometimes makes the text on the sign hard to see.  Also, I saved money by not getting it mounted on a hard surface.  I could always just cut out a piece of cardboard and tape it to the back of the sign next time to keep it from looking droopy while sitting on the easel.  Overall, I spent less than $50 total on the sign and easel, which is much less in price and less of a hassle than the rollup signs which go for around $200.

However, I thought the top of the booth was a little plain.  We had one small printed black and white sign provided by the convention.  I had to duct tape it to the poll since I didn’t have any string.  However, next time I would like to get big banner to stretch across the top.

On one table, we had one television, one monitor, and a laptop.  The television was connected to a Mac laptop by HDMI, and played games through the Itch client.  I made sure to download most of my gamepad playable games at home before arriving, since we did not have reliable Internet access there.  The convention did offer (slow) WiFi at a price, but we decided not to sign up for that.  The other monitor was also connected to my old Mac laptop by HDMI as well.  There really wasn’t any issues with the display, but I did have to remember to mirror the displays on the laptops which were sitting behind the monitors.  The biggest hassle was getting the gamepads to work.  The XBox controller does not work with a Mac without third party software being downloaded and installed.  Fortunately, I already had this setup on the old laptop.  On the new laptop, I just used a PS4 controller connected by mini USB.  However, the button mappings were wrong, so I had to manually configure the buttons on the Input configuration when the Unity game started.  Plus, I had to watch out for some actions that were mapped to multiple buttons, such as Jump and Submit triggering on the same or different buttons.  The third display on the table was just a laptop that showed screenshots from games.

On the other table, we had one television connected to an XBox One, one monitor connected to an Intel compute stick, and handouts.  Dylan gave me instructions for setting up the Intel compute stick, and I got everything running except for the game, which later he figured out was due to me using the wrong power adapter.  Apparently the one that I connected didn’t give the Intel compute stick enough power to run the game.  We also setup a tray for another monitor running on Jacob’s laptop.  I stacked up some of the storage boxes for a monitor connected to my portable Raspberry Pi arcade box, which ran a simple Honey Bear game that I created in Scratch.  I thought it was a good example for how beginners can learn to program.  The only problem was that the Raspberry Pi would go to sleep about every 10 minutes, so I had to periodically tap the joystick.  The XBox One would also go to standby, but I was eventually able to dig around in the menus to find the settings to keep it from doing that.  The obvious monitor idle setting wasn’t enough, and there was another app idle setting that had to be changed.

I tried to come prepared by bringing scotch tape, scissors, sharpie markers, a pen, and other supplies.  One of the televisions was new, so one thing I didn’t anticipate was needing a phillips head screwdriver to put the legs on the bottom.  Luckily, I asked around and someone let me borrow one.  I also let other booths borrow supplies like the scotch tape.  I also brought sheets to cover up our displays at the end of the day.

While setting up, the power unexpectedly went out.  I contacted the event coordinators and they traced it down to the plugs being loose on the main power switch.  The booth had an outlet on a plug with three plugins.  I believe we had four power strips and two extension cords, so we had power coverage for the entire booth.

We had many games for people to play in our booth.  Kitty’s Adventure seemed to be popular with kids.  The biggest problem was that I needed to manually restart the game after someone had finished playing, since the level difficulty increased with bigger mazes as the game progressed.  New players should start back at the beginning.  I’ve heard others talk about having a “convention mode”, which offers a smaller sampling of the game with the ability to easily reset.  Dylan had his Knox Runner game on display, which was our only multiplayer game.  He also had three kindle tablets with his Retrofuture, Shifty Shapes, and One Card Hero games.  You can read more about his Kindle Fire setup on his site.  Joe from DoubleSquare had a laptop showing off screenshots and videos of his games, as well as a playable Khufu’s Delivery Service on a tablet.  Jacob had Lost Signal, a game that he created for Ludum Dare, on display and was playable by keyboard.  I also had Turn Back the Clocks 4, which people seemed to like once they understood the rules.  Amish Brothers was on a monitor on the first day, but I changed it to Easter Egg Hunt on the second day, since I think is a more polished game.

One thing I thought was helpful was putting printed names of the games on top of each of the monitors, because that would have been the first thing that people would have asked.  Plus, it lets the other spectators see the name of the games being played, without us having to tell them.

The most popular handout was the brochure.  I liked them because it had all of our regular members, links to their websites, and some of their games listed.  It was one thing that I could give to somebody that had all of our information.  The individual business cards were nice, but may be a little too much when we have four separate developers.  My stickers were also somewhat popular, but it seems really hard to get rid of the magnets.  I’m not sure if people just don’t understand what they are or if the magnets are just inconvenient to carry.  Most people have space on their refrigerators for magnets, so I thought they would be more popular.

The biggest misconception that most people seemed to have was that our booth was for one company or game studio.  We had to keep telling people that we were each individual developers, and the booth was for our community group.  Most people seemed to be supportive, and I heard “did you make these games yourself” a few times.  I think the biggest thing we were going for with our booth was the awareness of our group, and there are game developers in Knoxville.  People seem to be supportive of things that are locally created.  Another issue that some people had was not knowing that they were allowed to play the games.  The controllers seemed to be placed openly, and I don’t know if making a sign that says “feel free to play our games” would help at all.

We met quite a few people at our booth.  Zane Everett from the Atlanta IGDA came up from Georgia to see the Knoxville Gaming Convention.  He recommended that we check out SeigeCon in Atlanta in a few months, which sounds like a mini GDC in the Southeast.  I also believe some of the members of KnoxDevs stopped by since I posted about it on their Slack group.

The overall area for the gaming part of the convention was relatively small, but we were close to the main stage which did bring lots of foot traffic when events started and ended.  This was supposed to be a preview for a future gaming convention, so we are definitely looking forward to doing it again.  Aside from us, LevelUp games had retro games to play, Token Game Taven had arcades and pinball machines, ExtraLife had a live stream setup, and there was laser tag information.  There was also a few cornhole setups to play or purchase, and large jenga blocks that frequently crashed which was unsettling at first, but I seemed to habituate to it after a while.

We were all fans of Wild Bill’s root beer, which gave unlimited root beer refills if you paid for one of the collector mugs.  There was about ten different kinds of root beer to choose from, including original, vanilla, grape, orange, and six shooter.  I will admit that it was a lot more sugar that I am usually accustomed to consuming for two days.

Shutdown was fairly hectic, since we were ready to get out of there after being there for 15 hours over two days.  We were able to get everything boxed up fairly quickly, but carrying everything out was exhausting.  They offered to cart everything out for us, but we would have been one of the last ones to leave.  Unfortunately, I wasn’t allowed to park next to the entrance, but I did eventually manage to get a spot a little closer with my vendor badge.

SEO for Game Designers

First of all, I don’t claim to be an expert in SEO (search engine optimization), but I do know that there are things that can be done to improve your site’s ranking on the search engines.  I’ve been specifically researching how to improve SEO for game data.  Recently, I’ve had the problem of other sites pushing down my site in search engine rankings when doing searches for my games.  I decided to start working on driving more traffic to my game pages on my own site, instead relying on other sites to be the “homepage” of each of my games.

I’ve been doing some research over the past few days, and found that domain authority plays a big role when determining where your site appears in a search.  Your site may have superior content on a certain search topic, but it may not rank highly in a search if your site does not have a good domain authority value.

From what I’ve read, there are multiple factors that play a role in your site’s domain authority.  First is the age of the site or domain.  My levidsmith.com domain is 8 years old at the time of this writing, according to an online domain age checker.  However, the first domain that I ever used was gitcommand.com, which was my site when I was in college.  I recently reclaimed that domain, after letting it expire years ago.  According to the same tool, the age of that domain is 16 years 11 months old.  So I updated the DNS settings in my hosting account to do a 301 redirect for anything that lands on gitcommand.com to send the traffic to levidsmith.com.  Will this help search engine rankings?  Probably not since my old domain most likely gets zero traffic, but it definitely doesn’t hurt to have it redirect the traffic to my “new” domain.

SEO for games - Moz Open Site Explorer toolsThere is a good tool at Moz called the Open Site Explorer, which checks back links and gives your site an overall domain authority rating.  The free version only lets you see a limited number of sites in your link profile.  It isn’t the official source that search engines use to grade your site, but it provides a good picture of how your site scores.

Another factor is what is called back links.  Having links to your site from another site of higher domain authority will supposedly raise your site’s authority.  One problem I’ve had in the past is posting content to multiple sites.  For instance, I would post a game jam post mortem article on both my site, other game developer sites (which will remain nameless), and on the Ludum Dare site.  I always thought that if I posted a link back to the original article on my site at the top of the article, then my site would “get credit” for being the originator of the article.  However, from my research I’ve found that really isn’t correct.  Linking back to the original site may give my site some domain authority since it is getting a link from a site higher authority, but searches for my article will return the site of higher authority first.  On some search engines, it will only display the site of higher authority, and not show my site on the search results listings at all!  This is probably because the search engine thinks that my site is the one with the duplicate content.  So I’ve basically spent hours on an article that I’ve given away to another site for free.  That may not be a bad thing if you’re just starting out and want to get your name and content noticed, but I’m at the point where I’m finished giving away content and want the traffic directed directly to my site.  Supposedly, you can add a canonical link meta tag  to specify the originator site, but it only works when it’s located in the head tags, and most sites don’t give the user any ability to modify what’s in the head tags.

One option is to remove the duplicate content from the other site.  I’m assuming that this will result in a domain authority hit on my site, since I’m losing the back link.  However, this may not be so bad if the search engines think that my site has the duplicate content, which results in my site not being shown in the search results at all.  Hopefully if the search engine is smart enough, it will see the content gone from the other site, and then recognize my site as the true originator of the content.  The other option would be to remove the content from the other site, leave the link, and maybe just provide a snippet of the content.  Then just provide a link to “read more” at my site, and hope that the search engines rank the other site lower since a majority of the content is now missing on their site and still remains on my site.

Another factor that I didn’t know about is the linking text.  Apparently, having the text of the link match the search terms increases the likelihood of it showing up higher in the search results.  That’s a good reason to not just post plain link, where only the URL displays in the content.

SEO for games - IndieDB has high Domain AuthorityWhen I publish a new game to my site, there are a few sites that I use to create an online presence for my game.  Most of these sites provide the option to specify a back link to the game’s page on my site.

  • IndieDB – This site appears to have one of the highest domain authorities, and seems to be the IMDB of indie games.   I believe games previously had to be reviewed and approved to be included on IndieDB, but now it appears that games are approved by an automated process.  This site requires five screenshots and basic metadata for your game like genre and platforms.  I’ve noticed that when I post a game to IndieDB, it is included in some search engines within the hour after being posted, so it is crawled very frequently.  The content is also mirrored on ModDB, so your game may show up in searches on ModDB as well.
  • Unity Connect – This is another good place for posting your game.  It’s primarily for Unity games, but I think they allow all games, since there is a check box to specify whether or not your game was created with Unity.
  • Cartrdge – I was using this site when it first launched.  Back then, the site owners were very finicky about what content they allowed on the site.  I remember they deleted one of my games, because they said that their site was only for games that were in development.  However, it seems like they’ve  changed their policy and now allow all games.
  • Game Platforms – Probably the most important is having a link back to your site on the game platforms that are actually hosting your games.  Microsoft provides linking back to your game site from the game’s page.  This is something that can be easily missed, since it is not a required field.  Similarly, Google Play allows you to specify a link to the game’s page as well.  I don’t have games published on iOS, Playstation, or Nintendo, so I don’t know how their game pages work.

Here are some other sites that you can use as a game developer to build your site’s domain authority.  These are sites than rank highly when I search for myself (“Levi D Smith”) in search engines.

  • Channel Nine at MSDN – I’m still not sure what this site is supposed to be.  There are developer forums, shows, and events.  I think it’s supposed to be video service by Microsoft to provide updates to developers.  I created a profile on the site, which has a link back to my home domain.
  • CreateTN – This is only for artists in Tennessee, but appears to rank highly by search engines.  Unfortunately, it only allows links to their predefined social media sites.  It also asks for an address, which is will display on a map next to your profile, which seems a little intrusive.
  • Patreon – Having a Patreon site isn’t just for making money.  It will also help boost your site’s profile.  Be sure to put a link back to your site on your About you section, so that a link back to your site is on your front Patreon page.
  • Game Jam Sites – My profiles for the old Ludum Dare site and the new Dream Build Play site rank high in search results.  The Ludum Dare site link seems to no longer work, so it would be nice if they would 301 redirect the old author page to my profile on the new LDJam site.  The Dream Build Play site does not technically allow me to link to my site, but it does allow me to link to my developer diary, which is hosted on my site using the dream-build-play tag.  GM48 is another game jam that I’ve done a few times, and it allows linking back to my personal site on my developer page.
  • Game Hosting Sites – I primarily focus on Itch and GameJolt, and I have my site linked on my profile page on both sites.
  • Social Media Sites – Twitter, Instagram, Pinterest, and YouTube allow linking directly to my site.  I have not found a way to link to my site on LinkedIn yet, but I can put it in the text of my bio.  Tumblr doesn’t allow linking to my site in the profile, but I can put links to my games on my site in my posts.  Pinterest provides a way to validate your site to display a link on your Pinterest page.  YouTube also provides a way to validate your site, allowing you to create links directly to your site from a video Card or an End Screen Annotation.  I’m currently in the process of creating links to my game pages from the corresponding game videos on YouTube.  It’s a long monotonous process, but it seems like starting with my most popular videos (the ones that will get the most potential traffic) provides the best value.  A few days ago, I added a link to my Creating My First NES Game article from the End Screen Annotation for my Programming the Nintendo Entertainment System video, and I can already see some traffic coming to my site from the video.
  • GitHub – Provides linking back to my site on my profile.  I’ve put some of my projects that I’m fine with being public on GitHub.  However, I feel like I’m giving away traffic for my content again.  However, the hosting is free and I currently don’t have my own git repository on my site.
  • SoundCloud – A great site for hosting soundtracks for your games, and it provides a link back to your main site.  The only downside is that the free version only allows storage of about two hours worth of music, but that’s still a lot for free.  I’ve had difficultly building a following on SoundCloud, even though I regularly post my music to the site.  It seems like the only traffic I get is when I embed one of my game soundtracks into another site.
  • Reddit – I found that I can get lots of traffic on Reddit, especially with YouTube videos, but there can be backlash for not following “Reddiquette” so I try to promote my work sparingly.  I did create my own sub-reddit specifically for posting information about my games, but it doesn’t appear to get any traffic.

The big question that I have, is whether or not my site is negatively impacted if it links back to a site of higher authority.  I doesn’t seem like I would be losing any authority, but I could be validating that their site is the official game site.  I’ve heard that link position in the article is a factor, so I put my external links at the bottom of my game’s page.  That would make sense, as Wikipedia always places their external “See also” links at the bottom of the page.

Another thing I checked was old social media sites.  I had a Facebook page called Levi D. Smith Software, which is different from my primary Levi D. Smith Games page.  Facebook provides a tool to merge pages if the names or something are close enough, but for whatever reason Facebook couldn’t merge my two pages.  Therefore, I just set the former page to private so that traffic is no longer split between the two.  I also had a Google Plus business page called Levi D. Smith Software which was splitting views from my regular Google Plus page.  Apparently, I used up all of my tries for changing the name, so I just removed the page all together, so I can just focus on the personal page.

Supposedly page load speed also plays a factor in how well your site ranks.  The two sites that I use for testing my page speed are GTMetrix and WebPageTest.org.  I also use the WP Super Cache plugin for WordPress.  The plugin generates static HTML version of requested pages, but the page still has to be generated on the first access, unless the cache is preloaded.  I’m currently evaluating the settings for preloading the cache.  The first time I tried it, the plugin got hung during the cache generation.

To put it bluntly, some of my games just have bad names.  Two examples are Archaeology and Free the Frog.  My Archaeology game will never be found in a search result, unless someone specifically types “archaeology levi d smith”.  Free the Frog is bad because the word “the” is typically ignored, so it returns results for everything related to “free frog”.  On the other hand, search engines do take the URL into consideration, so it was a good decision when I made my custom Game content type in WordPress, so that every one of my games automatically contain the word “games” in the URL, in the format https://levidsmith/games/<game name>.

One issue with my SEO is that for many of my old accounts, I used my handle and gamertag, which is GaTechGrad.  If I had to do it over again, I would have made everything LeviDSmith, to avoid splitting the traffic between the two names.  Unfortunately, I’m not going to go back and recreate all those social media accounts at this point just to change the name.

Google Webmaster tools is good for seeing where your site ranks for given search terms, and how many people clicked on your site when it appeared in search results.  WordPress Jetpack statistics also shows how many people who have viewed your site and how they found your site.  Bing also has it’s own version of webmaster tools.

SEO for games - Search Engine Results for Blocks of NibiruEach search engine seems to be a little different.  Based on a search for my game Blocks of Nibiru, Google seems to favor IndieDB, Itch.io, and YouTube before listing the game on my site.  The same search on DuckDuckGo lists my site after YouTube and ModDB, but only if I put the search words in double quotes.  Witout the quotes, DuckDuckGo does not return my site at all.  However, it seems like DuckDuckGo’s results are very volatile, and the same search may return different results at different times.  Bing lists the game on ModDB first, then YouTube videos of the game, then IndieDB and Itch.io, but it does not list my site at all, unless I add “levi d smith”.  Bing seems to heavily favor domain authority, so it seems to be hard to appear in the search rankings unless your site is a part of a major corporation.  On the bright side, all of the search results are pages that I control, so I do have the ability to tweak the content on both my site and the other site.  Unfortunately, making changes may not effect the search results until the sites are crawled again, and it is nearly impossible to know when that will happen.

To ensure that search engines are crawling all of your content, it is important to specify a sitemap in the Bing or Google webmaster tools.  Sitemaps are used to give search engines essentially map of your site, which includes a list of all of the pages and media on your site, along with when each was last updated.

Adding links from the previously mentioned sites to your own domain probably won’t help increase your search rankings over night.  I believe the SEO for game rankings is improved by based on people visiting those sites first.  It’s all about creating the potential for people to click on the link to your site from those other sites.  Consistent branding and making a game that people want to see more plays a huge role as well.  I also suspect that money plays a role as well.  If you pay enough in ads, your game will pop to the top of the rankings.  However, most search engines will display a notice about which links are promoted.  Who knows, maybe I will write my own game search engine some day.