The mobile app development world is fragmented. There are dozens of companies competing to provide backends, analytics, and ad networks. The game engine market is no different. There are countless engines. Some have visual interfaces, some support 3D, and some are cross-platform. Over the years, the importance of different factors has shifted. In turn, different game engines have reigned supreme over the App Store’s relative short history.
It’s important to choose an engine that’s going to be a major player for years to come. When Apple and Android make changes to their operating systems in the future, you want an active game engine that’s going to update for the new changes. Trying to update an abandoned third party tool yourself is not a good experience. Therefore, let’s focus on the three most popular third party game engines by market share: Unity3d, Cocos2d-ObjC, and Cocos2d-x. You want one that’s suited for your game type, but it’s also worth understanding their place in history to forecast how well these engines are positioned for the future.
Let’s start with Cocos2d-ObjC (formerly known as Cocos2d-iPhone). This engine dominated the early mobile game market. It was open source, free, and used Objective-C, the native language of iOS. Due to its popularity, it had a large online support community. We used it for Pico Time and Fizzy Factory. It’s a good engine. The main drawbacks to Cocos2d-ObjC are that it focuses on 2D development, and it only supports iOS. Neither of these was a big issue in the early days of mobile app development. Developers made substantially more money from Apple’s App Store than from the Google Play Store, largely due to user demographics. The more expensive iPhone attracted users with more disposable income for apps. The 2D limitation wasn’t a problem either, since devices weren’t powerful enough for elaborate 3D games. Consequently, Cocos2d-iPhone ruled the market. Those are both major drawbacks now, though.
By 2013, there was a greater push for cross-platform solutions. High-end Android devices grew in popularity, and users of these devices spent money similarly to iPhone users. As a result, many developers flocked to the Cocos2d cross-platform offering, Cocos2d-x. Although written in C++ instead of Objective-C, the methods were mostly the same. At the time, the English support community was small and some functions from the Cocos2d-ObjC library were missing. That has all improved now. We rewrote Fizzy Factory in Cocos2d-x to port it to Android. The transition went well, so we also programmed Spelldom in Cocos2d-x.
One downside to Cocos2d-x is that it isn’t as convenient as Cocos2d-ObjC when integrating third party libraries. You almost certainly want at least one analytics sdk, like Flurry, in your app. It’s very likely you have Facebook integration to handle your login process or some other social interaction. You might have a bunch of ad networks integrated for monetizing your app too. Assuming you’re developing for iOS, all of these sdks are written in Objective-C or Swift. Since your Cocos2d-x code is in C++, integration is bit more challenging. Despite this minor setback, the ability to more easily port your app to Android is huge plus that makes Cocos2d-x a superior option to Cocos2d-ObC for us.
While we’re comfortable recommending Cocos2d-x over Cocos2d-ObjC, neither of them are inherently 3D game engines. Cocos2d-x plans to integrate more 3D functionality going forward, but for now, it’s primarily a 2D engine.
As devices have gotten more powerful, 3D games have started to appear on iOS. We’re still in the early days of this transition, but if mobile follows the same trajectory as other platforms, 3D games are here to stay. Unity3d is the main player in the mobile 3D market. It has the highest mobile engine market share, and that share is growing. It is currently free to use up to $100,000 in revenue, and the support community is robust. Unity supports cross-platform development, and is a major player in the PC and console game markets. If you’re going to make a 3D game, Unity is the best option for mobile.
Furthermore, Unity is actually capable of 2D games as well. I think the learning curve is bit tougher than the Cocos2d engines. You program the games in Unity’s own IDE instead of Xcode. That’s something else to learn and likely overkill for your 2D efforts. Since you are working in a separate IDE, you have to export your Unity project to Xcode whenever you want to test it on a device. These are minor setbacks, and it’s easy to see why Unity is doing so well in mobile.
Unity seems better positioned for the future than any other mobile game engine. It’s the natural choice for a 3D project. For a 2D project, there’s some debate. Cross-platform functionality is important, so I’d focus on Unity and Cocos2d-x instead of Cocos2d-ObjC. I think Cocos2d-x is a more natural environment for programming 2D content. It’s totally free at all revenue levels, which is a nice plus. If you ever want to build a 3D game in the future, however, it probably makes sense to get used to using Unity now. You’ll be well positioned for the future—at least as well as you can be—in the rapidly changing mobile world!