Cheers mate!
Post mortem huh, that's a great idea, ok lets see:
Well I'm not the best coder (I'm an artist), but I have been using playmaker for a while now and felt confident enough to be able to design a small sports game based on what I knew it could do and what I could do quickly.
I spent the first month, 2 days to art & animation and the rest to building the main menu and the hurdles game and polishing it to the point we could put it in front of people.
I used NGUI for all the gui using 2 atlases, one for the game, one for the menus. Very easy to set up using get/set properties but Playmaker did have problems changing the properties in game, i.e changing the selected event name when you press a button. So with deadlines looking I set up multiple labels and used Playmaker to hide their parent folder then unhide the one I wanted to see. Messy but it works.
Used the pixel popped look to mask the fact that anti aliasing kind of looks crappy when scaling graphics.
I used Unity animations for the menu sliding in/out transitions, controlled by an FSM that just handles those transitions. So click play and it sends an event called menuToPlay which starts the anim, waits a second then brings in the events panel. It works well but creating those animations is time consuming, I'll just use iTween next time.
There is an FSM that runs at the very first screen, when the publishers name comes up. It checks for screen res and in combination with NGUI's anchors resizes elements to fit better on 4:3 screens, iPad etc.
One major problem I did not foresee was that some devices have a vertical res of 240, experia mini for example. I started my game with a minimum size of 320 and scaled up from there. Elements would overlap or be partially off screen and it was just too big a job to sort in time so those handsets were dropped.
During testing it became clear that fragmentation between devices on Android is a nightmare. Publishers demand that the game runs on certain handsets and mostly old ones. Framerate is hit hard on these devices so we ended up stripping down the game somewhat to improve the framerate.
Getting the drawcalls down is key. Use profiler on the gpu to see how many drawcalls you have. I had 50-60 initially but was still getting 60fps on my tablet. Low end devices were so choppy that events that took 20 seconds to finish were taking a minute.
The standard skybox had 6 drawcalls, so that got binned. Either use a single dome map or ambient colour which is what I decided on.
Skinned meshes have extra drawcalls, don't use too many.
Optimise your lighting, ideally bake them.
Make sure that cameras that are not seen are turned off.
Got down to 16-20 drawcalls after optimisation which allows it to run on most handsets.
I limited the max framerate to 30fps as faster devices running at 60fps made the game almost impossible to beat as the call everyframe to reduce speed was double.
I made a waypoint system for making players run in a curve. Initially it was a whole bunch of colliders each of which set the player to iTween rotate to the next then Destroy Self. I ended up redoing it with one collider and one FSM. The player hits the collider which looks up the next location from a table and moves it to the next point, the player then rotates towards it. Much faster.
I used Pause controller from the asset store to pause, works great and integrates well with playmaker.
The publisher did request that the back button paused as well. And eventually stipulated that if theres an interrupt then the game needs to resume to a pause screen. Gets a bit complicated when you're already paused or if you use back to pause the pause button is still active. Bear in mind that you need to create a pause FSM that allows for multiple ways to pause that don't conflict with each other.
Another publisher request was to have the game under 10mb else it would require an installer to split. Mine came in lower than that once I'd optimized the art but it's something to bear in mind.
Another request was to create different build for carriers. So France Orange wanted a version with French as default language and Player outfit. Very easy to do by having an int switch at the start to do the set up for this then changing the number before you build.
Player prefs were a breeze with playmaker, also very easy to set up a first run fsm to set language etc. Just have an FSM that checks a bool for firstrun = true to show anything once the first time, then set it to false and save it to a Pref.
I have it so that selecting an event sets an int variable, hurdles = 1, long jump = 2 etc. Makes it very easy to reset a scene or reload one using int switches.
Select an event then start the game.
Load a scene that has an int switch that sets the correct tutorial and tells the ready button which game to load.
When I want to reset a scene I fade to black, load an empty scene with 1 FSM that reloads the event scene from another int switch instantly.
And when you return to the menu another int switch to tell the panel which event details you want to show first (i.e the one the player played last).
Disabling FSMs on an NGUI object seems to stop them from working sometimes. I never found a solution to this and time constraints meant that I cobbled a solution together for disabling buttons. Just have a dummy button that sits behind it and move the real one off screen with set transform.
The events have a lot of FSMs to set up a scene, handle speed animations etc but once the event starts a lot of them are no longer necessary. I set up one FSM that managed the others and turned them on and off as required.
The action DeviceVibrate.cs caused unity to add the vibrate line to the android manifest even though it was never used. This got us refused from the Nook and Kindle stores originally. Just deleted it and all was good.
There's loads more, maybe I'll do a blog post sometime, any questions just fire away. I did though get a mail from our publishers yesterday though that praised us on our ability to get a product out in a short timescale and on time and that they were very impressed at how quickly we were able to implement changes. A lot of that is down to Playmaker and just how easy it is to quickly build up content from an idea, but I'm not telling them that just yet:)