A year ago, I started learning Unity 3D after having published several iOS and Android apps done with Xcode and GameSalad. My brother coded the first efforts, including our children's book "Jack and Joe" (which has sold several thousand copies, woho!), but he became too busy to work with me anymore. So I had to do everything myself. GameSalad was my first choice. But GameSalad was a very slow piece of software unfit for most kinds of game development. Games were incredibly slow since it is not a native solution, but a sort of emulation of software on top of software. Regardless of how it works, it was not very fast and my dreams of creating of more children's books and games were killed. At least until I decided that I would just bite the bullet, and learn Unity 3D.
As a 3D-artist working in the motion graphics industry for the Norwegian Broadcasting Corporation (NRK), I had a great advantage when getting into a game engine like Unity. I already knew a 3D package well, and understood how to navigate and manipulate an environment consisting of x,y and z. I had done things involving rigid bodies, skinning characters, alpha channels on materials, etc, etc. The rest was just about learning how to attach scripts and code in Unity.
After a year of development in Unity, I figured I would put together a list of things to do and not to do for budding game makers:
2. The Unity Asset Store
You can buy your way out of any problem.
If you're making an FPS, buy an FPS kit. Doing a car game? Buy a car system. 2D platformers? You can buy one and hack it to your needs. Someone has made what you want, so just cough up a little cash and fulfill your vision.
3. Google any problem
This may be seem quite self-evident, but it is as true for life problems like that weird rash on your back as it is for programming. Every kind of imaginable problem or challenge you encounter is something someone else has encountered and overcome. The Unity Forums/Answers are filled with solutions, Stackoverflow has a lot of threads on Unity and there are a plethora of video tutorials as well. Just google your problem and you will find a solution very quickly. Oh and put some lotion on that rash.
For your interface, you can forget about Unity's own GUI system. It is incredibly slow and not very good. First of all, you need to get NGUI. It's made by the same guy who is developing the Unity's new GUI system, so essentially you're getting the same. It's fast, and you could in theory get it's drawcalls down to 1. Reducing drawcalls is very, very important on mobile.
Another plugin you might want to get is FingerGestures which will allow you to do various swipe gestures. I use this in "Animal Drivers" for doing tricks, and it's a great solution.
5. Multiple resolutions & Pixel Perfection
Now, for pixel perfection on all kinds of different resolutions on mobile platforms, you can either figure out how to do something called "atlas switching" manually in NGUI or use the Retina Pro plugin which does this automatically for you.
Atlas switching essentially menas that you make one version of your graphics for every resolution ratio. So for a button, you'd make a 128x128 px button graphic for iPad Retina, one 64x64 px version for iPad 1 & 2, iPhone Retina and one 16x16 for iPhone 3GS. These kind of equate to the same in Android and Windows mobile devices.
You could skip the trouble of making pixel perfect games, but it will not look all that great. Take the time to learn how to do this properly.
6. Optimizing for mobile
This is incredibly important (exlamation mark x4).
Learn how to optimize for mobile graphics. The latest devices are fast as hell, but if you don't learn about batching objects and drawcalls, your beautiful 3D game might not even run on these superfast mobile devices. Reduce the vertex count on your objects, combine as many objects as you can into one mesh and try to pack several objects into one material.
7. Find a programmer
There will be times when you simply cannot figure out how to solve a problem. Either that or it will take you so much time that it is simply not worth it. You're busy, you are making a game. Find someone good and pay them to make individual scripts. Chances are, you will learn a great deal from these scripts and there is a basis there for hacking them to fit whatever future needs you have. This sounds expensive, but it doesn't have to be. I have paid anywhere from 10 dollars to 150 dollars for scripts I needed for The Sculptor or Animal Drivers.
8. Watch a ton of video tutorials
Some links to video tutorials:
9. Set your game to run at 60 fps
Add this to your function Awake to let your mobile device run at 60 fps : Application.targetFrameRate = 60;
By default, Unity (Apple?) caps your fps on mobile to 30 fps, and that is just not good enough for most games. My game "Animal Drivers" at 30 FPS is not a pretty sight. So what's the drawback to setting your game to 60 fps? Well, it will suck batteries like some energy demon from your player's device, but it's worth it. Players expect heavy duty content like games to drain battery, so it's fine and everyone does it.
10. Monetization - Go free
Statistics are showing that barely any games are premium (paid) anymore, and your game is extremely unlikely to make any money if you go this route. Even games with serious recognition and press are barely breaking even. You'll probably be putting years of your life into this, so make sure you choose the right path. My game "The Sculptor" made about 500 USD in ads in 6 months. It's a free game made mostly so that I could learn Unity on a very simple project. If I had gone premium on this, I would have made 10 dollars. And that would be from the few friends I could I force into buying my game. To monetize a free game, you need ads and in-app purchases.
Advertisements networks: Chartboost / RevMob: These two provide interstitials that pay exceptionally well. Someone installs a game via the ad in your game, and you're paid between 0.50 cents and 3-4 dollars. It's crazy. Now compare that to getting a one-time payment of 0.99 (-30%) in a premium app.
TapJoy With your free app, you'll want to include an in-app based economy. TapJoy provide a way for your players to get coins and gems without having to pay. They either have to watch an ad video or participate in an offer from an advertiser. The more they do, the more coins they get. It's a nice way to let users who don't want to pay get the items they want in your game. Everybody wins. TapJoy also provide interstitial ads like the ones from Chartboost/RevMob.
iAds / AdMob: iAds pay really well if you have a lot of daily users, and AdMob pays quite poorly even if you have a decent amount of users. I'd recommend going for interstitials rather than a constant banner. It's intrusive, ruins your game and you won't make all that much money off it really.
In-App Purchasing: You only need one plugin for this, and it's called UniBill. It's fantastic. One plugin will let you setup your in-app purchases for iOS, Android, Amazon, Windows Mobile, Mac App Store, etc. You will save yourself an anstounding amount of time and effort by using this one plugin.