In the hours following the news of Shiva’s (temporary?) demise, I purchased a copy of the Indie version of the Android compiler for Unity. I already knew that it would be suitable for what I wanted to do, so it wasn’t really a leap of faith. The only real concern I had was how long it would take me to get up to speed.
It did take a few hours to wrap my head around the way scripting works in Unity, and although it does work, I find it a bit untidy. Because of Unity’s strict object-oriented design, everything in a scene is derived from a basic object, which then has numerous scripts attached to it, to grant it the properties and methods that define it. Shiva’s approach is to uniquely define the properties of every type of game object, and then provide a collection of functions to manipulate it.
While I find the structure messy, I can see the benefits of doing it Unity’s way – in particular, with 3rd party plugins. The standard objects that Unity provides can easily be enhanced simply by attaching scripts defining new methods and properties.
Speaking of plugins, Unity has lots of them, and many are high quality. Shiva belatedly acquired an asset store late last year, but due to the smaller community there hasn’t been many plugins added, and potentially useful plugins are largely API wrappers for iOS.
Besides the smaller user base, I suspect Shiva’s biggest issue is that the plugin structure isn’t very flexible. It’s not straightforward to integrate with Shiva’s API, especially trying to call back to the game API from a plugin. Plugins also have to be written in native code, not Shiva’s scripting language, which makes it hard for anyone who only knows Lua.
I started off browsing through Unity’s asset store, and despite tremendous willpower, my cart was repeatedly loaded up with the following add-ons:
- NGUI: like Shiva, Unity’s default GUI needs some love. I’d written an elaborate GUI layout tool that used XML files for my Shiva apps and I didn’t want to go through that again. I’ve read that Unity will be getting an improved UI system, but since it’s not happening this week (or on any specific date), I’m going with NGUI. I doubt learning it will be wasted time, because Unity’s solution should be similar as they are both being created by the same developer.
- Playmaker: Increased productivity through code avoidance. I had a bit of play with it today, and I can see that it could be very useful in many situations, especially prototyping.
- Easy Touch 2.5: A package to handle touch gestures. It was only $20 and included a joystick which was a pain to setup in Shiva the first time I did it. I may still buy FingerGestures though, because it supports Playmaker, assuming I become a Playmaker disciple like so many others. One day perhaps, Unity might be considered an essential add-on for Playmaker?
- Localization Package: An efficiently titled, simple method for handling basic app localisation. I’d actually written something similar to this for Shiva too.
- Multi-platform Toolkit: Very important, and yet again, something I’d crudely implemented into my Shiva apps.
- 2D Toolkit: Sprites! Another module I’d written for Shiva. I gave up on my sprites because Shiva hasn’t yet been given the ability to directly call functions in one script from another. Everything has to go through events, which are slow. This meant that in order to implement sprites, I’d either have had to write a plugin in native code, or copy all the sprite functions into the scripts that needed access to them, resulting in code duplication and maintenance issues. Couldn’t be bothered.
- Rage Suite: After I’d bought 2D toolkit, I found out about this gem. 2D vector sprites, similar in style to Flash. I ended up buying the full pack, including Rage Spline and its add-ons, because I wanted the SVG importer which is going to save me a lot of messing around.
- Edy’s Vehicle Physics: I bought this out of curiosity. The last thing I’d played with on Shiva was the vehicle physics demo that is supplied in the samples. Shiva’s version works, but would need a lot of work to bring it up to the standard of Edy’s, which also runs surprisingly well on mobile devices.
I started writing this as a comparison of Unity and Shiva, and it’s turned into a quick review of some of Unity’s 3rd party plugins.
At the end of the day, both Shiva and Unity do the same job. A Unity game might look more professional because of its shader support, but Shiva is easier for a novice programmer to learn, and it has better cross-platform support.
What really sets these apart are the 3rd party plugins, of which Unity has far more of far higher quality, thanks to the way it’s implemented and the larger user base.
In total, I’ve probably spent $500 over the past few days of testing. For that money, based on my experience, I’m convinced that I’m going to save myself many, many months of my time, which is incredibly important because the software industry moves so fast and I’m just a team of one.