First off, I by no means consider myself an expert in game development or VR. I’m a web developer with a passion for VR and had a goal of publishing a VR game using Unity. I had no experience in game development prior to creating and publishing Dodgeblock VR for Oculus Go.
Was it easy? No. Was it worth it? Yes, it has been an incredibly rewarding experience.
However, I do wish I knew what I was in for before I started all this. Had I known what I know now, I could have saved myself a lot of time and effort. These are lessons for my younger (and fuller-haired) self, and every other creative soul who wants to build a VR game.
Lesson #1 — Don’t Build a Game
This sounds counter-productive, but if you are just starting off with Unity and C#, you know nothing.
Spend as much time as you can doing tutorials, exercises, and experimenting. If you have a game in mind and you immediately start trying to implement it, you will get stuck and demoralized.
Being stuck is part of the process when it comes to learning something new, but with game development, it’s a whole other level.
When you have this grand idea in your head and you can’t even get past how to change the color of a Game Object, your goal will seem further away than ever.
Instead of trying to start on a game, embrace experimentation. Start with a tutorial or existing projects and modify them. This will force you to understand how they work and learn from them. You’ll end up totally messing them up, but that’s ok, they weren’t yours anyway.
Lesson #2 — Keep it Simple, Stupid!
When you’ve got some familiarity with Unity and you can’t keep those voices in your head quiet anymore, you are going to be itching to start on a game. Is it time to let loose and aim for the sky? No. Aim low. Aim real low.
Whatever familiarity you think you have with Unity, use it, and design your game around your strengths. Sure you can go outside your comfort zone, but bring yourself back to safety before you go too far down the rabbit hole.
Have you noticed that Dodgeblock VR is ONLY comprised of primitive cube Game Objects?
Oh, I tried other stuff too… I spent eight hours straight trying to figure out how to move a ball in a realistic way as if it was thrown in the air. Then, having a bug that caused an exponential amount of VR balls thrown in my face.
Eventually, I realized I needed to put constraints on my game and limit my scope using a set of rules based on my skillset and comfort:
- Use the Cube primitive Game Object provided by Unity for pretty much everything. This was a safe bet for me since I know these will be performant in my scene — especially because I would be spawning them procedurally.
- Only target the Oculus Go platform. Trying to build a game that will work for multiple platforms is not easy, and the Oculus Go was the perfect fit for me because I could bring my headset anywhere and share my game. There will be time to port this to other platforms later.
- No multiplayer. It’s hard enough building a good single-player game.
- It had to be simple and accessible to any kind of VR user, even first-timers.
- No gravity. Physics is hard.
Once I did this, it became much easier to visualize what I could build and focus on.
Lesson #3 — Engage the VR Community ASAP, and Don’t Stop
In order for your game to ever be successful in the store, you need some momentum going into it. You need hype, and you need champions who are going to vouch for you. Luckily, the VR community is very welcoming and eager to help you with your game. Don’t wait until you are almost ready to launch before sharing your game with others. Do it early and often. Build up a following on Reddit and Discord channels. Provide your game to users using a pre-release channel in Oculus, notify users after every update, and be consistent.
I started marketing my game back in February 2019, just before I was planning to release it. I got some interest and kept it up for a while, got some useful (and some not-so-useful) feedback, but I ultimately postponed the release (see Lesson #7 — Feature Creep is Real) and lost all my momentum. I didn’t start up engaging users again until a week before I was ready to launch. I even forgot entirely about Discord.
Don’t forget about the community, they are what will make or break your launch.
Lesson #4 — Avoid the Asset Store
It’s tempting to search the asset store for something that you don’t know how to do and just import it into your project. Think that’s the magic bullet? Far from it. That’s not to say there isn’t some great stuff in there, but until you can really get a grip on what you’re importing, you’re best to avoid it. Save that $30 you are going to spend on a package that boasts fancy particle effects. It might look great in the demo scene, but you’ll have no idea how to properly configure it in your scene, let alone getting it to work in VR.
Lesson #5 — Take Breaks
It’s easy to put in hours and days at a time on a project, especially if your passionate and excited about it. But doing too much at once can cloud your judgment. You need time in between to reflect on your work, collect feedback and iterate.
I’ve spent entire weekends on things that weren’t valuable and were tossed out.
Lesson #6 — Grow Some Thick Skin
So, you have a game now, however simple it may be, and its fun and you are ready to start sharing it with others. Congratulations on making it that far! There’s a Git cemetery somewhere out there with millions of projects that never saw the light of day. Now it’s time to show it off!
When you show your game to friends, family, and testers they will have their own opinions. They won’t always align with yours. Getting feedback is extremely valuable, but it can also be your downfall. We all know about negative feedback and that can hurt, but if your game really is that bad its better to know that now than later. Pick yourself up off the floor, take a break and come back to it with a clear head.
Now, what about positive feedback? Take positive feedback from your friends and family with a grain of salt, they’ll support you either way. The only positive feedback you can truly trust is from independent testers. Where possible, use a group of testers you don’t know personally.
Lesson #7 — Feature Creep is Real
For me, the most difficult type of feedback to interpret was feature requests. It sounds great and is usually a good sign that people are into your game. In fact, they like your game so much they’ve invested their own time to try and help you. You are likely to get some great ideas here, but you need to always bring it back to Lesson #2 — Keep it Simple Stupid.
It’s tempting to implement everything your community has asked for. You want to make them happy. After all, they’re your first customers. But, if you aren’t careful you can end up increasing the scope of your game to levels you never accounted for, skewing your original vision for the game. After a few iterations of implementing features, you are likely to get even more feedback on those new updates and your lists of tasks will continue to grow. You’ll go way past your intended launch date, and due to the complexity of your game, it will become harder to maintain. More bugs, more headaches, and now you have a rolling launch date.
Yes, this happened to me. I had Dodgeblock VR approved by Oculus and set to launch back in February 2019. At the same time, I had just received tons of feedback from my testers. I got so excited that people were actually playing my game that I dedicated myself to them. I addressed every piece of feedback and diligently implemented their requests. Ultimately this forced me to pull the game from the Oculus Store before it even launched — in fear it wasn’t good enough. In the months that passed, I went back and forth trying to implement different things to satisfy users. Most of the time this leads to me building something, testing it, and throwing it out a week or so later due to performance and stability issues. 6 months later, and I finally learned I needed to dial it back to the basics if I ever wanted to launch my game.
Lesson #8 — Be Mindful of your Partner
Developing a video game requires a ton of energy and time. If you are like me, you have a full-time job in tech (I manage a SaaS CMS product — Agility CMS) which doesn’t always leave a lot left in the tank when you get home. If you have a partner living with you, and you’re spending all your left-over energy on something they can’t participate in, it's going to affect them. Of course, they will support you, and they may never tell you it bothers them, but this will slowly drain your emotional bank account with them.
Don’t put a strain on your relationship, it's not worth it. Make an effort to prioritize time with your partner and try to set a schedule for when you work on your game. This will help both of you make the best of your time together and set expectations. If you can, try to involve your partner in your project too. Perhaps they can help you test, create marketing materials such as screenshots, posters, videos, etc. For me, I got some buy-in from my partner by establishing that any proceeds from my game would go towards our “art fund”. Not sure how fast we’ll get there, but she’s in my corner now ;)
Lesson #9 — Mobile VR != PC VR
This will apply to you if you are developing for mobile VR platform. Just because something worked well on your Oculus Rift while you are developing in Unity does NOT mean it will work well (or at all) on the Oculus Go. The Go has dramatically different hardware than the Rift and every frame is critical on the Go. Pay very close attention to the FPS on the Go. Add an FPS counter so you can see the FPS while you are testing it on the Go. If it drops below 60 FPS (on average), revert whatever change you just did.
I can’t tell you how many hours I’ve wasted reverting a day (or sometimes days worth) of updates because of performance issues on the Go. What made this even worse is that I’d often test a whole bunch of updates and then I’d have to to go through the painstaking process of elimination to figure out what the culprit is. Test on the Go after every bug fix or feature update before moving on and be smart about using Git to track these changes.
Lesson #10 — You CAN Do it!
If you aren’t familiar with impostor syndrome, you will be after trying to make your first game. You will constantly think you or your game isn’t good enough. You’ll second-guess every decision, lose confidence, and you might even give up.
The best way to combat this is to have a good support system. Friends and family are great for this. The fact that you are even working on a VR game is remarkable enough. When you are down on yourself, talk to them about it. Sometimes all you need is a little reassurance and a reminder of how awesome you are.
The VR community can also help with this. Nothing invigorated me more than hearing that someone lost themselves in VR with my game.
What to Expect after Launch
Dodgeblock VR launched on August 23, 2019, the same day I started to write this post. On launch day, I felt a great sense of achievement, but I was also incredibly nervous. It was 2:30 PM EST and the game has been out for an hour and a half and the thought of having zero sales on launch day started to set in. Despite having interest from the community and confidence in the product, I was anxiously refreshing the Oculus analytics dashboard every few minutes. Another 30 minutes passed, the dashboard refreshed and it read “1 Copy Sold”!
I was ecstatic, it didn’t matter that it only meant $2.00, this was never about making money. All I wanted to do was create a game that I could enjoy and hopefully, others would too. The fact that people are paying for it made it that much sweeter.
Over the course of Friday, Saturday, and now Sunday, I’m seeing steady sales and very positive reviews. It’s still early and picking up steam, but I’m hopeful it will become a house-hold name in the VR community.
Now, I’m going to go check the Oculus dashboard and hit F5 a few times…