The thoughts, rants, tips, tricks, stories, truths, and lies of Jordan Irwin
I made and shipped a game :)
It’s not a fancy, big game. It’s a kids game. A game my kids enjoyed playing, so I decided to publish it to the Apple App Store.
The pitch:
Run, and jump, and collect your ABCs, 123s, and colors!
Learning Runner is a kid-friendly platformer aimed to educate and entertain. Don’t worry about Ads, in-game purchases, or even a “Game Over” screen. This game is built so kids can play without interruption or frustration.
With procedural levels, multiple backgrounds and music, and some fun tricks- the gameplay is always different and the fun is always the same!
It’s playable on iPhone and iPad. Technically it also works on Apple TV, but I’m not ready to release it there (yet!).
You can get it here for $0.99.
Why not free?
Originally, I planned to make it free. But after much reflection, I decided “free” isn’t a fair price for anything that took time to create; and I don’t have a monetization strategy after aquisition. There’s no advertising or in-app purchases. If you buy it, you have it all without disruption.
I hope your family enjoys it. Please leave a review, comments, or tweet your thoughts to me.
Oh, there’s also a Support Page and a Privacy Policy.
Shipping a game took a lot more effort beyond “building it”. I may blog about that in the future.
While working on tvOS support for my upcoming kids game, Learning Runner, I discovered mapping commands to the Apple TV Remote isn’t as easy as it could be. Ultimately, I purchased Rewired from the Unity Asset Store to help, but I still struggled with a few things that drove me crazy.
Once deployed to an Apple TV, using the Apple TV Remote for UI Navigation was rampant and unpredictable. It simply didn’t make any sense where the selections would go based on my touches, or nothing would happen at all.
The following actions corrected the eradic navigation behaviors:
I took time to learn how the Unity UI Navigation works and see what other’s have learned too. In many cases, I setup Explicit navigation routes. Understanding this is paramount for controller support.
Related to above, in some cases I simplified how my UI elements were organized in the scene. Less panels, less Layout Groups, less complexity.
I stopped trying to map the DPad values from the Apple TV Remote in favor of the Touchpad X and Touchpad Y elements (these are the Rewired names, but this applies even if you’re implementing your native mappings.)
Even after these changes, the Apple TV Remote still seemed to “click” UI elements unexpectantly. Toggles would check/uncheck and buttons were clicked just by navigating through them. It was always the same toggles and buttons though, so it wasn’t random, just very odd and unexplainable.
After trial and error and frustration, I finally corrected this behavior by naming my controller Actions and EventSystem triggers exactly as recommended in the documentation: UIVertical, UIHorizontal, UISubmit, and UICancel. I had been reusing the non-UI actions since the mappings would be the same- thinking it would be simplier and save time. NOPE! It caused hours of frustration and debugging instead. I don’t believe there’s anything magical about these names, but I do think there’s some overlap and mis-firing when sharing UI actions with non-UI actions.
So, after hours of debugging and trial and error and reading and frustration and thinking and WTFing… my iOS game officially also works on tvOS with controllers- including the Apple TV Remote. All that annoyance, mostly because I didn’t follow directions…
P.S. Rewired is a very valuable tool for managing controller support for Unity projects. Check it out.
Full credit goes to my friend, Vlad. Thanks for introducing me to it!
[I’ve never taken a good picture when I’ve cooked this, but next time I will and add it here]
Overview
I know this seems like alot of steps, but really it’s very simple- the steps are just broken out to help guide you through it. Once you read through it, you’ll see that there’s really only three steps: Boil pasta, roast vegetables, blend sauce.
There’s three components to this dish: pasta, sauce, and roasted vegetables. Since the roasted vegetables take the longest, we’ll start them first. Second, we’ll get the pasta cooking since we’ll want to use some of the water for the sauce. While the pasta is cooking, we’ll sauté the mushrooms since it will be part of the sauce. We’ll then combine mushrooms and sauce, mix it into the pasta, and top with the roasted vegetables.
Servings
6-8 servings
Ingredients
Steps
Prior preperation…
Roasted vegetables…
Pasta…
Sauce…
Finishing…
Tips
For a side project, I’ve begun really digging into Swift, SpriteKit, and the latest XCode (Beta7 atm). Here’s a list of various resources I’ve found handy:
Notice the frequency of www.raywenderlich.com? It’s become practially a staple learning tool for me as of late. Thanks Ray and team!
Part 6 of Lost Mine of Phandelver. The full series may be found here. Here lies actual accounts of fictional events. Spoilers exists if you haven’t yet played this adventure.
The companions head back to the main corridor where a previous flood nearly wiped them out. Met by charging goblins and the wolf seen atop the chimney, the party has little trouble elimating this threat and continues on.
Ahead they see a wooden bridge crossing over the corridor and a broken and crumbed path to their left. Gosef begins clearing the broken path, paying close attention to the rubble and potential rock slide he may cause. Another loud rush of water appears from ahead, and the players once again dart to the walls for protection. The flood splashes through without victim, but the predicted rock slide hasn’t been avoided. Gosef, waiting for such an event, dives out of the way as the path crumbles around him- several large rocks just missing his head.
Thinking there’s only so much water available, the party continues down the main path- directly challenging another flood to come. The wooden bridge passes above them, and ahead they see a dam indicating the source of the floods. Correctly assessing the limited water supply, Gosef sneaks ahead to scout around the dam.
Gosef looks into a large chamber with two ponds being fed by a thundering waterfall from the mountain. Several goblins stand guard at the far end. Welby sneaks up the dam and into the shallow ponds, taking a hidden position just north of the goblins. Gosef emerges from his hiding place west of them and unleashes his arrows, Erdrick prays for his Sacred Flame to ignite his enemies, and Welby fires volleys of arrows from hiding. Together they quickly dispatch these foes.
“Who is dis in my cave?”, loudly snarls the large humanoid creature previously seen by Welby. Walking from the southern chamber, a confident and angry Bugbear wielding a massive morningstar approaches…
There is more to this story! The full series may be found here.