Hands. Gosh darn hands.
Apologies for the not so friendly introduction right now but this week has been quite the troublesome one. The culprit — you guessed it, Unreal Engine 4 and VR hands.
This is quite a wild ride this time around so strap yourself in comfortably and prepare your mind as we enter “The Why the hell do I even Bother zone”.
You’re traveling through another dimension, a dimension not only of sight and sound but of mind. A journey into a wondrous land whose boundaries are that of imagination. That’s the signpost up ahead — your next stop, the Why The Hell Do I Even Bother Zone! — Image Source: AvGaHo
Our story begins when Herbert completes work on the Twitch system, as described in the previous developer log. His work is done and now it is down to me to bring it into the game.
No sweat, it’ll be done in no time. Famous last words of a sane pig-faced homunculus.
So I begin porting the code Herbert had written to allow UE4 to talk directly to Twitch. Nothing fancy here, his code was rock solid and it was a simple pseudo copypasta job.
On a positive side note, the concept work for Moe Green is completed. Image credits: AvGaHo
Before you know it, the code is in and ready to test. But I’m getting ahead of myself, here.
So Herbert had written this agnostic chunk of code that in theory can be used anywhere. And it can. So I thought, “Hey, that original plan of having Twitch show up on a detective’s notepad is dumb, there are times where it wouldn’t be right to have a notepad just lying about”.
So I hatched an ingenious plan to make an in-game tablet that’s attached to the players off-hand. The idea being they can look at the tablet if they want to read chat, check subtitles (good for accessibility kids, always look for ways to make sure everyone can play your games) and change options, review case notes, all that good stuff.
The overall design on the tablet. As you can see, it is broken up into three main areas. The settings / evidence locker is in the top left, twitch is always visible on the far right and the subtitles are on the bottom. Image source: AvGaHo
So there I am, putting together this tablet and it looks nice and what not when suddenly BAM — My Oculus touch VR hands stop working in Unreal Engine.
Why did it happen? No idea. Insert other questions here? No clue. Did it cause an extended period of searching far and wide to come up with a solution? Most definitely.
What do you do when your virtual hands just stop working? Well, you try to debug. I bring in some new hands, no luck. I try the default UE4 template hands, no Bueno.
The tablet attached to the hand fine but the hand remained motionless, unable to produce a fist or act like a hand in any fashion. What evil possessed my install of Unreal Engine to do this to me? Image source: AvGaHo
This is strange. Very strange. One day they’re working and the next, just frozen in space, unable to clench a virtual fist or poke things that shouldn’t be poked.
“It must be an input issue” I cry out loud, tears of promise streaming down my oily, dirty snout. I check every file, piece of code and setting in the engine. Nope, none of that worked.
“Maybe it’s something to do with where the inputs are!” I howl in desperation, wishing for this nightmare to end. So I take every single input in the project and move them to multiple places. No dice.
At first, I believed the issue might have stemmed from the animation blueprint, so I spent a considerable amount of time working and reworking the hand blueprint to try and fix the issue. Little would I know all that effort would be in vain. Image source: AvGaHo
It is at this point, I think to check a blank project. Maybe there is something wrong with the project. I create a new UE4 project, load in the default VR content and… nope. Still, doesn’t work.
Isolated, confused, betrayed. All these emotions. How could all of my experience making video games end like this? It just makes no sense.
I hit up all your favorite search engines looking for an answer. A new direction. Nothing. Not even a hint. I then get the smart idea of copying over settings from projects I know that work but all I was met with was crushing disappointment.
In times like these, even though it sounds like a good idea, do not copy configs between projects. It cases more issues than it’s worth. You’ll have to trust me and my forgotten sanity on this. Image source: AvGaHo
This was it. This is going to be the end of little old me. Then, things get even better.
That’s right my disaster loving amigos, things got even better. The Oculus turns off and starts blinking yellow. This ain’t right. First the hands and now this?
I slap the issue into the search engines once more. All that returns are answers to different questions. In another life, nay another time — these might have been the salvation I needed. But, in this reality, in this nightmare, they just sent me further down the rabbit hole of despair.
The imagery portrayed in Disney’s Alice in Wonderland where Alice falls down the rabbit hole pretty accurately sums up the whole situation. Every time you could come up with a possible solution, you just fell down deeper and deeper. Image Source: Disney
So I’m sitting in my chair with no solutions, a broken project, a severe lack of virtual hands and the HMD has apparently taken a look at the situation and committed seppuku.
I was getting desperate. So much so in fact, I temporarily joined Unreal Slackers. Yes, the situation was that dire.
For those who don’t know it, Unreal Slackers is akin to the cesspit slums you see in cyberpunk films. I am convinced most of the people there are actually there to cure loneliness, not for the actual purpose of Unreal Engine developers networking, helping each other out and all those other noble intentions.
An example of the quality conversation and passive hostility you can expect if you walk through the doors into Unreal Slackers. It would seem most of the people would rather circlejerk about the strangest topics rather than discuss Unreal Engine 4. Image source: Unreal Slackers
I’m sure once upon a time it was a nice place. Well, who am I kidding. I was there from the very inception and it didn’t take long to become the ugly pulsating boil on the side of the face of the Unreal Engine community.
To admit defeat and ask for help there is sending out a warning to all that I’m one step away from joining the Oculus in seppuku heaven. But I had no other choice.
I log in and post my issue, begging for help from anyone passing by with the knowledge of similar issues. For a while, nobody paid attention — perhaps they were either too busy or had never come across a situation like this.
A snippet of the conversation of trying to solve the mystery of “Why the hell is this happening to me”. Image source: UnrealSlackers
Suddenly — a stranger emerges from the mist. He’s willing to help out. My savior! I’m saved! Or was I?
Sadly, this stranger was one of the many people on the Unreal Slackers who have good intentions but they don’t really have experience in what they’re talking about.
I noticed this quickly when I informed him of my issues and he just kept regurgitating the same information I was feeding him, possibly in an attempt to sound intelligent.
At this point, I had lost all hope. This is a self-portrait of what I looked like during this time. Image source: Disney
After a while, the conversation was getting nowhere and I had to try a fresh approach. With no virtual hands and an Oculus that had started its voyage to Valhalla, I needed to try something drastic.
I needed to format my machine. Back to square one, begin the fight anew. I had to cleanse my PC of whatever hand stealing demon had infested within.
Without delay, I began the formatting process, trying to talk myself out of it every step of the way. “I didn’t try this”, “I could try X method again” I tried to deliberate with myself. Deep inside I knew though, this was the only way.
This is always a big gamble. Even though you may have backed up every single file, you can never be 100% certain everything will go smoothly and you copied every single file over. It is entirely possible you’ve forgotten about a folder or important file. Luckily, I had pre-planned for a while now that this could one day happen and have ensured every time an important file is created on this machine, it is synced to multiple cloud storage applications and the most important files of them all are hosted on the company Perforce. All remember source control kids. Image source: Microsoft
A couple hours later the formatting process had completed and all the important applications had been reinstalled. Back and ready to fight again.
I load up the project. The freaking hands are still freaking broken. I let out a scream that would even make a banshee turn their head impressed. Why is this happening to me?
As I sit there, slumped in the chair, defeated and void of all hope, one last final option creeps into the corner of my mind.
Even after formatting and all the countless debug steps attempted, the hands refused to play ball. Sense none it made. Image source: AvGaHo
What about standalone? What if I built the game off and ran it like it was finished? I was hesitant for just a moment, before realizing there was probably not another option.
I pressed the “Build” button in Unreal Engine 4 and waited for progress. Build failed. Just kidding, the build went fine.
Once the project built off, I opened up the newly baked executable, ready to test the hands and…
It worked. For no reason or rhyme, the hands worked in standalone but didn’t work in the editor itself. Even now, as I sit here, typing this to you beautiful lot, I can’t figure out why this is the case but it is still an ongoing issue.
But I shouldn’t complain too much, at least a method of using the hands now presented itself after the struggle of multiple lifetimes.
From this point, it was the simple but tedious case of continuing working on the Twitch system whilst constantly cooking off builds to ensure the hands were still working.
Finally the hands came to life. I could finally point and more importantly, use the virtual keyboard to type in the Twitch username needed to connect to Twitch chat! Image source: AvGaHo
After a while, the process was complete and it came time to test the tablet. Another build and I’m ready to give it a shot.
The game loads up, the sound kicks in. This is a good sign. A good omen if you will, that everything will work _just_ as intended. The tablet appears. The hands still work. I log in to Twitch and await the chat messages.
Nothing shows up. Yes, after all the heartache, blood, sweat, tears and lost sanity, the darn thing didn’t work.
Where did I go wrong? Was it Herbert or was it me? Fun fact, every single time, if that is a question you face, it’s not Herbert.
So I went on another goose chase, Yadda Yadda Yadda losing the last droplets of sanity and all that… until it clicks. Twitch usernames are always lowercase. At least in the backend. I hit my head on the desk so hard I tore a hole into an alternate dimension.
I make the fix and fire up the next build.
It works. It finally works. I may have lost my soul and my will to live but the messages finally started appearing on the darn tablet. Hallelujah.
I save my changes, push them to Perforce and celebrate by cradling myself to sleep in a cold pool of tears and disappointment.
This was truly a battle of the ages. What makes it even more depressing is that only you — yes you, reading this right now, will know of the trials and tribulations the damn hands caused me.
How I feel now that the mysteries had been solved. It actually works. Now just to make the rest of the game. Image source: Universal
Don’t worry, it can be our little secret.
But yes, it all works and I never ever ever want to see virtual hands ever again. Until the next time, I do, of course.
I want to thank you for reading this, it was very touch and go in parts. I hope the story was entertaining as even though you might be laughing internally right now, my inner voice is screaming and clawing its eyes out with its new found working hands.
Have a good week and I’ll see you in the next one for another spicy meme. Until then, don’t die and sweet dreams.