Looking to port... Researching Engines

Hello! As an introduction, my name is Phil Russo (aka par) and the time has come to port our game. I run a purely independent gaming company (purely as the only money in it is mine so far) and for the past two years we have been in development of a DTD/RPG hybrid using the Torque3d engine from GarageGames.

Opening my eyes and realizing that I made a mistake when the engine was chosen has been a very bitter pill to swallow. Now that GarageGames has fully gone under (and come back in some limited form) I realized that if we want to release this game on a stable, supported and widely accepted engine, we need to switch. We’re tired of putting the majority of our development efforts into making the engine do what it should do out of the box.

One month ago I would have said we were 3 months from releasing. But time and time again we have come up against roadblocks (the least of which is I cannot find anyone who wants to work on T3D) that required us to modify the engine or modify our design simply because the engine couldnt handle it. What this means is we have a fully drawn out design, 90% of all art assets completed and w/ the architecture I chose in the beginning, the majority of “game assets” located externally to the engine itself. Porting wont be easy no matter the engine we choose, but porting we will do and I need to find the right engine.

With that said, I have some questions and I am hoping that I could get some information from this community.

  1. External Game Assets (SQLITE) -

What I mean by this is that I have architected the game assets in such a way as the majority of “game” items such as player info, events, quests, items etc are all abstracted into an sqlite db instance. I see from the documentation that db support is not inherent to Unity but many 3rd party solutions are possible. I would like to know if sqlite is easily integrated and if it can be integrated w/ encryption. The design of our game leaves ALL DB access out of the actual “game play” (i.e. everything is determined prior to “launching” a level) so I am not worried in the least about performance. If sqlite can be integrated does it work on all of the platforms that Unity is designed to work on as well?

  1. Networking -

I know Unity has a full set of networking code behind the scenes but going through the tutorials and documentation I do not see a step-by-step explanation of out it really works in Unity. This is not an MMO, but we did have a very nicely implemented 1v1 multiplayer mode where there was a master server that coordinated matchmaking and then one client assumed the master role in order to coordinate the game itself. Once the “server” was instanced, the master server left the scene so basically the master server was just a game lobby. I am not worried about building something like this, but how exactly does networking work between clients in Unity (or better, is there a link that describes this process)?

  1. Multi-platform -

Theoretically, if you built everything in script, could you port your game to any platform that Unity runs on as long as you have the license?

  1. UI Engine -

One of the biggest issues we have had in our development is the UI engine. Torque had… well lets just say a LOT to be desired when it came to building a UI. One of the major issues we continued to deal with was their font engine but more importantly was UI scaling. Not only do you have to worry about different resolutions but also the aspect ratio’s of those resolutions. Does Unity have a decent way to handle this from a “component” point of view (i.e. basic UI window and panel resizing) along w/ correct font scaling?

  1. Packaging -

Is it safe to say that Unity comes with a robust installation packaging system? Building one from scratch is a chore in and of itself…

  1. Client Installation Updates -

In our T3D version, we had to build our own updating mechanism. Does Unity have its own install updating mechanism or can I assume I will need to port this as well?

So, that’s where I sit. On one hand its quite a bummer to realize that 2 years worth of work needs to be redone but on the other hand at least its not too late AND we, as a group, are excited w/ the possibilities of what a real engine can do.

Thank you for reading this and I greatly appreciate any/all comments!

PAR

I’ll may cover all answers in deep tomorrow, I’m pretty tired now but I’ll cover few of your questions quickly now:

1 - You can interface easity any database with Unity. In our game we are using xml and sql (with the WWW class) over the net.
Check out the mono or ms xml namespace for more info on that and of course the Unity WWW class one. But i truly suggest you to create your own custom parser if you have plans on using the xml on Unity mobile.
2 - There’s a networking tutorial on the Unity documentation check it out:
http://unity3d.com/support/resources/tutorials/iphone-multiplayer-tutorial
and
http://unity3d.com/support/resources/example-projects/networking-example

If you are looking for better and scalable networking tech, look for electroserver, pretty powerful and it’s free to try.
3 - Besides some few specific classes for each platform, you can port your game to any Unity platform really quick. Most of the time is an input port work that you must do.
4 - Unfortunately right now, Unity UI system is heavy, not recomended for mobile and even on PC still heavy (one drawcall per object).
And there’s no tool to create your GUIs, it must be done through code.
However, there’s a new UI system coming into Unity with some designers tools and is pretty fast for mobile.
5 - Yes, when Unity build’s something, assets and code are encrypted.
6 - Asset’s are encrypted once builded, you must update everything in your project, then build the client again.

I’ve also tried the past last years the same project over different engines and Unity was the best choice so far. You’ll now see the light in the tunnel. Rest in peace, this time you’ll be able to finish your project with Unity. :wink:
If you have any other questions, I’ll try to help you out.
Cheers,

Thank you very much for the detailed reply tatoforever! I greatly appreciate it.

Couple questions:

  • DB Interfaces - Are they the same across platforms or do you need to do something different say on a PC compared to on the iOS platform? They will both use sqlite, which is multiplatform, but is the support there for both?
  • UI - So, in my experience the biggest thing that is lacking in most independent games is a very thoughtout and usable interface. What do the majority of release games using Unity do for a UI then? Do many developers work w/ the existing infrastructure or do they go the 3rd party route?

Thanks again for the response!

PAR

1 - If you use C# generics, you’ll be fine with your code, it should work everywhere, that’s one of the best feature of Unity so far, create once deploy everywhere. :slight_smile:
2 - There’s a very nice (low drawcall) GUI plugin for Unity, that is faster than UnityGUI and easy to use, called EZGUI. You can create any kind of UI object and design complex GUI elements without writing any line of code(for the design part mind you :P).
Well, 100% of mobile users uses EZGUI or some equivalent library on mobile, this is where UnityGUI hit really hard performance-wise. On Pc, you can stick with UnityGUI, you won’t notice any real slowdown, they are minimal. If you can’t wait for the new Unity UI system, i really suggest you to get EZGUI. You can have it through the Unity Asset Store or the author web site:
http://www.anbsoft.com/middleware/
He’ll provably
King regards,