2015/10/16

For the Love of Unity

As many of you might know, I've been switched over to Unity for a year now, almost exclusively. In the past year I've had the opportunity to work on a variety of projects as a freelancer. This has given me a chance to check out a few different development tools such as Game Maker Studio, Cocos2d, and Xamarin. Out of all of the packages I've tried none of them come close to Unity. It's clean, professional, stable, patched and updated to new tech frequently, easily extendable (the editor, Android/iOS plugins, etc), it easily ports to a bunch of different platforms, and there's a HUGE support community surrounding it. I can clearly see why it is one of the top game development tools. If you can't tell, I'm very happy with it.

Unity VS Toolbox is Born

Earlier this month I updated to Unity 5.2 which now comes with an installation of MS Visual Studio 2015 Community Edition (VS). I've been using VS 2013 for a while and built up some tools and templates in it, but they had become messy. So this gave me the opportunity to do some cleanup and build some other tools that I've been meaning to do. So I started a new public project on GitHub called Unity-VS-Toolbox. VS has the ability to create custom toolboxes. In this project I made a toolbox full of text snippets for each of the MonoBehaviour events. UnityVS Tools (the extension that connects Unity to VS) comes with something similar, an "Add MonoBehaviour Event" wizard. I always found this a bit clunky and it doesn't have the MonoBehaviour events in order of execution. My toolbox can be pinned open in VS and has the MonoBehaviours in order of execution. So, not only is it a functional way to add the event to your code, but it works as a quick reference too!

After making the toolbox I decided to keep going and share some of my other VS settings with the community. I've added text snippets for most of the MonoBehaviours and a few handy templates. The text snippets allow you to simply start typing the name of a MonoBehaviour event and Intellisense will automatically create a method stub for you. Unity VS does something similar via a hotkey, but I find this much more fluid. The templates I put up are pretty bare-boned at the moment. They include an editor script, scriptable object, the standard MonoBehaviour, a MonoBehaviour singleton pattern and a template of a MonoBehaviour singleton class. I hope to add more patterns as I find use for them in my games. I've just begun exploring programming patterns to help expand my programming knowledge and further speed up my development process.

Unity Design Patterns is Born

I also created a GitHub project called Unity-Design-Patterns. The goal of this project is for me to explore the various programming design patterns detailed in Robert Nystrom's Game Programming Patterns and make an example usage case in Unity. I feel this is a good way for me to learn more about design patterns and hopefully show other less-experienced developers a way they can be useful in Unity. So far I've only had a chance to explore the Command design pattern. It's pretty useful and one of it's main uses is that you can "record" and undo commands easily. It does have some caveats, though. You can read about these in the wiki page for the project. Next on the list is the Flyweight pattern. I'm having  difficult time finding a good example to make for this type of pattern since Unity handles a lot of heavy lifting like this in the background. I could skip to a Singleton pattern, but I want to be able to describe a solid specific example of when to use them so that I can debunk some of the hatred that surrounds them. This project is a lot of fun and a good challenge for me as it gets me to think more about structures. I'm already seeing that I use some patterns without really knowing what they are and I can now take this opportunity to define them in a better structure.

Other Unity stuff

Also on GitHub I have started posting Gists of some scripts that I make. One very useful script I put up is MasterCam. This script takes the settings of the main camera in the open scene and applies them to every main camera in every scene. It saved me a bunch of time in that project because we ended up changing camera settings many times. I'll be putting lots of useful scripts up there as a I come across ones I use or make that are general enough for community use. 

Finally, I've updated my Unity editor extension, Mobile Store Screenshot Helper, to be even more handy with a custom inspector that allows you to easily manage screenshot sizes (save and load to XML), and I improved the compatibility to be for Unity 4.6+. Last month we had great sales on the extension and I hope these improvements help to continue that trend.

In my next blog post I hope to tell you all about our next game. Right now I'm trying to decide between 2 prototypes. In the meantime I'm having a lot of fun "tinkering" with both.

As always, thanks for reading!

PS - I'm joining the team at CleanSourceCode.com as a blog contributor so I'll be writing more often and writing more about Unity there. Check us out on Facebook at facebook.com/cleansourcecode or on Twitter at @CleanSourceCode!

2015/10/01

Gravitone!


Finally, the day has come! Gravitone is now available on Google Play!

I apologize for all of the delays. I've been wrapped up in a number of client projects over the past few months and just haven't had the time to finalize Gravitone. After a short vacation I found some time to finish it up and I'm pretty happy with the gameplay.

Gravitone is an endless arcade style game that reacts to the music and has a simple goal: Push all of the orbs into the vortex that matches their color. However, things aren't that easy! The vortexes are shrinking and the orbs are not cooperative. Blue orbs are slow, white orbs are not, red orbs repel from their vortex, and green orbs spin. As soon as you get all of the orbs into their vortexes a whole bunch more pop out! Watch out for the Replicator that makes the orbs multiply. To help you groove your way to the top of the charts there are Time Stops, Vortex Expanders, Gravity Boosters, and Tractor Beams. The orbs and vortexes groove to tunes that you can select from your own music library.






Perhaps the most challenging part of this game was the player input (mobile input is hard!). I wanted it to feel like the orbs are alive and struggling against your finger, but not frustratingly difficult to push them around. After a ton of fine tuning I finally found a happy medium and I think it feels pretty good.

One of my goals with this game was to utilize Unity physics in a unique and abstract way that I'd never seen before while keeping the gameplay as simple as possible for mobile devices. All you have to do is push the orbs around with your fingers and tap on the powerup bar when you want to activate a powerup. It feels quite intuitive and is quick to learn.

Since the gameplay is typically pretty short (less than a couple of minutes). I wanted to give our players lots of reasons to come back. The game has leaderboards in Google Play and Facebook to encourage competitiveness and it also has a bunch of meaningful achievements. Almost all of our achievements are tied to unlocking a feature of the game. For example, if you get a score of over 500 you'll unlock the Vortex Expanders. I also provide the opportunity to unlock these by using coins you have collected by playing the game, watching video ads, or purchasing them directly from In App Purchases.


Next I have a bit of work to do before I can release it on iOS. Apple's push to have developers submit apps with 64-bit support means that we have a bit of work to do in updating the SDKs used in the game. I also need to write a plugin that will provide access to the music library on iOS and I'm not particularly looking forward to writing an Obj-C plugin.

At any rate, I hope that Gravitone is fun to play and that you find it is a unique gameplay experience. I had a lot of fun making it and I've learned a lot in the process.

As always, thanks for reading!

PS - Sudoku In Space t-shirts are now available! Check it out on Amazon!



2015/03/01

Adventures in Alternative App Markets Part 2

This is a continuation of a previous post which can be found here,

With Sudoku In Space we tried out many new things. Among them were multiple language support, a bit of paid advertisements, and distribution among various markets. Multiple language support was quite painful, but I think for Spanish it was well worth it as we have had some fair success in Spanish speaking countries. I'm not sure if our popularity in those countries is natural or more due to running a Chartboost campaign in those countries and they have a very low Cost Per Install. Japanese and Korean were not so much worth it. We've found that it is really difficult to break into those markets and I don't really think that Sudoku In Space is appealing to that demographic.

Our adventures in distribution turned out to be a mixed bag of results. For the most part the stores were pretty easy to publish on. There were a few exceptions which I mention in the previous post. In short, most were not worth the effort even as minimal as it was. The only one that stands out is SlideME. SlideME is one of the most popular markets we published on and they even gave us a featured spot which boosted our downloads quite a bit. Being featured by them is apparently pretty common, which is awesome because it gives many developers a fair chance at exposure. I'd highly suggest that an Android app is also published on this store. The effort was minimal and the return was pretty good.

On to the numbers!
I wanted to compare our results with those of Arturs Sosins as best as possible. I'm not sure if he was featured on SlideME so our numbers may be skewed in that way, but overall his app did much better than ours. It could be that it is more accessible as it is a casual game and not a puzzle game. Another major challenge was that AGK only supports IAP via the Google Play store. So we opted to publish 2 versions of the app on each store that blocked Google Play IAP. This was very painful and has led to 0 sales this way other that on Amazon. I have since tried to convince the developers of AGK to include OpenIAB support for Android which would give access to just about any IAP store. The numbers below are for the free version of the app only.

MarketsMonth 1Month 2Increase0%totalxGP
SlideMe377152(225)(60)%52948.09
GetJar011 1 10.09
Google Play7546(29)(39)%12111.00
Opera000 0 00.00
Socio FREE473 1 111.00
Amazon FREE077 7 70.64
Aptoide FREE341 0 70.64
Mobogenie10(1)(100)%10.09

As you can see, SlideME was by far the top market. Note that none of these markets had any paid advertising until after these dates. I'd also like to mention that these numbers are from Chartboost's recorded installs of our games and not from the sites themselves. Very early on we noticed a huge discrepancy between what the sites were reporting as downloads and what actually turned into installs. All of these markets were subject to this issue and I can only explain it as: There are bots clicking the download links. These markets have limited device ID tracking and don't seem to do a post install check, but only a link click. The other possibility is that users are downloading but not installing or cancelling. This seems pretty odd, especially for a game that was under 15MB at the time. There also could be things like download corruption and device compatibility issues. Ultimately we have no way of knowing, but we do know that what these store report is completely erroneous.

You may notice that this list is extremely trimmed from the previous blog post. So many markets were huge duds. They were riddled with download issues, only allowed payments via wire, were unresponsive to questions, etc, etc, I should also note that with Aptiode they offered us some free marketing credits, which was nice. Unfortunately, it turned out to equal about $1 per install and that was the only time we had installs through them. So if you're interested in pay about $1 CPI for non-guaranteed installs, that's the place for you...

Since this time we've done our first paid marketing campaigns with Chartboost. They all turned out just fine. We bid for $0.50 per install and that's what we paid. Most of the installs went to Spanish speaking countries because the bids there were lower on average, but if we wanted to wait we could likely have shut that off to focus more installs on the US / English speaking countries. Since the game is fully translated to Spanish, we didn't worry about this. We've had a lot of good reviews for the game and will still continue to work on making it visible, as that is the main problem (so many Sudoku games).

Sudoku In Space has just recently received coverage from NewsWatchTV.com. You can view their video review of the game here:

Also we're excited to announce that Sudoku In Space is one of Android Headline's top ten Sudoku games! Pretty sweet. I'm glad Allen is getting some attention and I hope this helps introduce Sudoku to many new people who wouldn't have tried the traditional grid and numbers style. The full article on that can be found here.

Soon I'll be talking about our next game, Gravitone. It is an arcade style game where you collect orbs by pushing them into their respective vortexes all the while the vortexes are shrinking and the dots are fighting against being put in their place. The whole game reacts to music and has some really interesting graphics. It is our first game with Unity and I'm having a great time using their tools. We'll finally have a game with all of the features we want like Facebook, Google Play, and Game Circle leaderboards and achievements, IAP in all of the markets with OpenIAB. We'll be able to share screenshots for bragging and all sorts of things we could never have done with AGK (without spending months extending its functionality and learning C++). We also hope to be able to publish this game as an online Facebook game. It should also be available via the web and if I can figure it out we can do Linux as well as Mac and PC, and maybe even Windows Phone 8. Stay tuned for more info on that.