From previous research on achievements, I knew that top games have between 30-40 achievements. Also, that of the 1000 points available for your achievements, you should perhaps use about 700-800 of them with the first release, to allow for additional achievements in later releases.
I built out an achievement list of 30 items, spread across categories of completing levels, completing levels with certain aircraft, earning medals, unlocking upgrades and planes, ranking up, and high scores.
Apart from the obvious achievements of doing something for the first time, or fully completing something, I added achievements designed to encourage certain play behaviors. For example, there are pre-requisites in the game before you are able to unlock the Boeing B-17 Flying Fortress or the Vaught F4U Corsair - so I made achievements specifically for unlocking those. Also, there is a Public Service Award Medal in the game for sharing from the app, and rating the app - and to encourage this I added a Community Minded achievement to earning that medal.
Entering the achievement data into Google Game Services and App Store Game Center is about forty-five minutes of data entry each. The Game Services were a little friendlier with a bulk export/import feature which can be used to make updates via CSV files. I discovered that Game Center setup requires a translation for each achievement for it to appear in that users locale - so that added a translation task onto the todo list.
The great thing about both stores is that you can test achievements before they are live to public. In my Closed Alpha build, and Test Flight build, I ran tests with two users in each, in different game states, to check the achievements were being awarded correctly.
One issue I had was that my testers were good at the game by this point, so were able to obtain the first two or three achievements in under five minutes. My expectation is that new players will struggle much longer to get their first one and I should be able to monitor this in analytics.
Unity's cross-platform social features worked better than expected and I was able to get from zero to working on both platforms in about a week. My first pass was just to see what happens (because you can't test in the Unity editor), then a bug fix pass, then addition of required features, such as remembering the users login preference - if they cancel a login - then don't auto-login next time they start the game.
There are additional features I left for a future update - such as awarding achievements to the player, earned while they were offline (no wifi, or no roaming data, or just not logged-in for example). The app can be smart enough to note the award of the achievement failed, and re-send it once the user is online again. I feel this needs some username recording to avoid accidentally sending player A's achievements to player B who happens to login to the device. Also, to avoid intentional misuse of this.
Creating the leader board was straight forward on both platforms. The only complication was that the game stores a top 10 table of local high scores.
I decided to send any score earned while logged in to a game service - but not to try and send the previous high score entries on the table (which might be higher) - because we don't know if they belong to the currently logged-in user.
In testing I found a bug where if you achieve 25,000 points, it wasn't awarding the 10,000 point achievement. So, as a rule I send all achievements up to the one you just achieved. This avoids missing one, and makes the system self-correcting if you advance further after you did something while offline.
While you can use the art provided by Game Services for the leader board and achievement icons, you don't need to. As Pixeljima is a cross-platform game, I wanted consistent icons so Zak, our art-guy, created some for the occasion in the games art-style. He is also working through creating a set of achievement icons, examples of which are included above.
My tips for others embarking on setting up achievements are:
* Do your planning first - make the achievement list - with achievement names - conditions to achieve them - and point value - to fit within the 700-800 point budget.
* After getting data entry and coding done - allow time for testing. Expect that at least one of the achievements is going to be bugged and need fixing - and your task is to be systematic until you find it!
* Be aware you will need translations of your achievement names and descriptions if you want them to be widely accessible. Also, creating icons takes time - and you might consider purchasing one of the many achievement icon sets available.
By Stephen McIntyre