If you're planning to develop a mobile app for multiple platforms while avoiding programming in Objective-C and Java, Unity is your game building platform of choice. It's a general opinion of many game developers that Unity is by far the best game development engine for indie developers, offering great architecture and content editor.
It's pretty easy to start using Unity, although some experienced game developers may at first think it's counterintuitive. At Intersog, we developed few successful games with the Unity engine in the past and have some Unity development projects in progress now, so I've talked to our mobile game developers and asked them to provide recommendations on Unity game development best practices based on their first-hand experience with Unity.
1. Don't hurry to start developing your game with Unity.
At first, take your time and learn Unity basic architecture, including game objects, scripting APIs, assets, prefabs, events, subprograms, time measuring variables, serialization, etc. Without clear understanding of the Unity basics, you'll spend endless hours on refactoring and debugging after the game release!
2. Set up your structuring rules and assign names to your assets and game objects.
Even a small game can become a mess without proper structuring. Check projects that developers publish in the Unity Assets Store to get better organized with Unity.
3. Program as little as possible. Instead of coding, use the Unity WYSIWYG editor.
Easily expandable, Unity acts as a convenient game builder and can even be used by people with no or basic programming skills. Using editor will significantly facilitate and accelerate your game development process.
4. Avoid using common practices that may conflict with the Unity ideology.
No matter how attractive is the possibility of locating all game objects within one scene or saving game mechanics parameters in XML files, these approaches will eventually complicate your life at later stages of your Unity game dev.
5. Be very careful when using game versions management system.
Unity has a tendency of changing files in an unpredictable way. For instance, making changes to prefab will modify all files of scenes where it's used only after the next saving. Always use force text for assets serialization and make sure files you upload to the server won't destroy previous work by your colleagues. Read about mobile app development.
6. Always test your game on as many platforms as possible.
Don't forget to adjust settings for each of the platforms. Failing to test your game properly will lead to it behaving differently in web player on Windows and OS X.
7. Use cross-platform Backend-as-a-Service (BaaS) solution for data storage.
Even if you're creating a single-user game, you still need a hub to store current progress data, user's stats, purchases, etc. Using Unity PlayerPrefs would be the easiest way if it didn't save all data locally (which is not good for such delicate things as in-game purchasing). Our developers suggest you better use cross-platform BaaS solutions such as Parse that allow for data storage in the cloud, support users' authorization, server functions, push notifications and provide analytics. However, do not use services like Parse for building your game server!
8. Use the NGUI localization.
Unity doesn't have any embedded mechanism for your game localization (and to be successful in your target markets, you need to localize everything from language to all background signs) and although it does offer localization tools available in the Unity Assets Store, it's better to use the NGUI localization that is very user friendly and is based on a single CSV file containing a column for each particular language. Yet, NGUI UILocalize functionality should be extended to allow localization into languages such as Japanese or Chinese.