FPS movement solution in VR?

Hi guys and gals,

I wanted to pose a question which I am sure will have been asked before - I just can’t seem to find a suitable solution. :frowning:

I’m currently working on a horror themed VR experience, but I’m having some trouble with player locomotion. Basically what I’m looking for is standard FPS type movement - W,A,S,D and controller, but with looking and “steering” done with the head. I know the default FPS setup includes HMD functionality, which works quite well, BUT… the head movement is limited and doesn’t include head tilt - which is pretty fundamental, especially in a horror game when you might want to look around a corner.

Why do I want to use FPS type controls? Well the answer to that is twofold really - firstly I don’t believe that the default teleportation locomotion for VR is suitable for horror. You want to be able to move slowly (which also aids in limiting potential motion sickness), entering trigger areas smoothly and building tension. Secondly, I also want to be able to offer a non-VR version for those who don’t have a Rift/Vive. So I definitely want to use this system.

I’ve spent a lot of time combing tutorial videos and not found anything that solves this issue. It’s possible using a floating pawn controller… until you want to start using stairs, as it doesn’t allow for the use of gravity. So climbing stairs is fine… getting down again is a bit of a problem. I’m sure there are ways of faking/forcing this in code… but I’m not a programmer, so I’m reliant upon the Unreal Blueprint system. I have been absolutely amazed at just how powerful this system is and what I’ve been capable of achieving so far. Unfortunately for me, the player movement is fundamental to the whole experience and until I get that working as I’d like… everything else is kind of pointless. :frowning:

**So if anyone knows of a forum thread or previously posted answer to this I would be truly grateful if you could point me in the right direction. **

As a bit of info about myself - I have been working in game development for 17 years as a 3D artist (character and environment), so am very familiar with all aspects of game creation and the process of getting things into game engines. But this is my first experience with Unreal (never worked anywhere that uses it, unbelievably) and I’m doing it outside of work as a self training exercise. I’ve already achieved some pretty amazing things in the short time I’ve been playing with it, but want to push what I’ve learned into VR.

Thank you for reading and again… if anyone knows a decent solution to my locomotion problem and can point me at a blueprint or other answer, I would be extremely grateful, thank you.

:slight_smile:

Nev

1 Like

Hi Nev,

for that type of navigation/behavior (stairs/gravity) your VR pawn should be derived from the Character class rather than from the Pawn or Default Pawn classes. The Character class already has a customizable movement component which takes into account gravity, stairs, etc. so you will be off to a better start with that one.

Regarding the WASD movements, it is pretty easy to orient the movement along the direction of sight. Just use Add Movement Input and use the Forward Vector of the VR Camera (HMD) as World Direction.

Another option for your would be to look into some of the advanced VR plugins/toolkit/template which already implement many functionalities. Lookup those from Mordentral @mordentral, Rune Berg @runeberg and Proteus @Proteus here on the forum.

My best recommendation is to give it a try and post again here if you encounter specific issues you need help with.

Good luck with your VR experience! Curious to see how it looks like. :slight_smile:

Cheers,
Marco.

Generally head forward based movement is more sickening to users than controller / hand oriented movement, it also makes it very difficult to “run” and look behind you at the same time, something I would assume you would want to allow for a horror game.

You might want to consider re-thinking your directional input method.

The suggestion to directly use a character as the base as per the post above won’t work unless you are doing seated / standing VR. For full roomscale it would quickly break down and requires some addtional setup (re-writing the character movement component or running a character and a seperate actor containing the HMD/controllers that you sync to it).

Regardless,

RuneBergs plugin on the marketplace provides a nice basic movement setup for VR using a normal pawn and a custom movement component, you likely want to look at it first. It has simple gravity and is easy to get in to.

My plugin is considerably more complicated but offers things like wall collision and the full movement capabilities of the normal engine character. I wouldn’t suggest trying to get into it unless Runebergs plugin is missing something that you need as the learning curve is significantly higher.

I don’t believe that the Proteus templates implement locomotion at all, or at least not gravity enabled locomotion.

True. I assumed however he is working on a seated experience since he mentions WASD locomotion… Can always use a wireless keyboard I guess… :wink:

He also mentioned Vive/Oculus which are pretty room roomscale or at least forward facing roomscale (for 2 camera oculus)

WASD refers to cardinal movement generally.

Could be wrong, dunno, was just stating it would have roomscale issues.

I second that; you can always simulate going up/down stairs like any movement, whether in a pawn or a character; whether via bp or code

However this is for a seated person; furthermore using head for direction has many problems as stated by @mordentral

We experimented with a few locomotion methods at a work. All used a controller position/touchpad input to get horizontal direction + trace down to get Z coordinate + trace forward to detect collisions.

1 - controller’s Yaw rotation for horizontal direction.
2 - normalized (controller location - head location) for horizontal direction, touchpad Y for speed (1 - max speed forward, -1 - max speed back). Similar to Onward locomotion.
3 - relative to current head rotation: touchpad Y for forward/back, touchpad X for go right/left.

1 is the most apprehensible for players. 2 is the most comfortable.

We also tested two collision systems. First blocks all movement if player is trying to move in a direction of blocking object. Second only remove to-object part of the velocity and allow to move along its surface (like in all non-VR FPS games). First was noticably more comfortable.

@YuriNK Thanks for sharing your findings. I recognize some of ours as well, even though we work with a special group of users and almost exclusively with seated experiences.

VR interaction/locomotion is still in a very early stage and there is still so much to be learnt. I think we should keep experimenting to understand what works best and what users can bear.

Even on a seated experience, head movement dependent locomotion could still add something as our own experience has shown.

Of course if you want to turn around by 180 degrees on the spot, exclusive head movements won’t allow for that (unless you are the girl from the Exorcist movie :wink: ). For that you need a mixed mode (head + controls).

Yeah, for my system I specifically set up a scaler to remove most of the sliding from wall collisions from walking around manually in roomscale. However it leaves it in place for movement component locomotion as it isn’t invasive in that context. Granted the movement component also doesn’t keep slide vector the same, it re-orients it and slows it down anyway, I would assume keeping it in its entirety would be fairly horrendous.

Straight up stopping movement on all objects with locomotion causes a lot of getting stuck on geometry if the level isn’t specifically designed around avoiding it.

Also giving a hard reference of bounds (ground plane or boundry box) during blocking pushback keeps the players frame of reference, while not something I actually demo I do mention it a lot as it tends to solve for the people that have issues with blocking movement.

Head oriented locomotion was all that anyone used in the infancy of roomscale, it has since been proven undesirable by natural selection (the vast majority of players do not want it). Granted with hardware like Gear you are limited by the platform, head oriented isn’t generally upsetting due to nausea but more because of the limitations it sets on the user.

For RunInPlace locomotion I actually vastly prefer Head Oriented, or at least within a angle range of the controllers.

Hey guys, thanks for all the feedback. Apologies for not responding sooner - but this is the first time I’ve logged in due to the festive period. I’ve been focused on my GW experience instead (gain weight).

I will most certainly look at Runeberg and Mordentral. Perhaps Runeberg first as suggested, if it has an easier learning curve - I’m not a programmer. :stuck_out_tongue:

I wanted to add some further explanation for why I chose the locomotion method I did, and why it works for me despite the obvious limitations.

Firstly, I currently work for a simulation company and much of the work we do is tested out on VR (Oculus and Vive). We’ve done quite a bit of experimentation into limiting motion sickness, which is the real killer for a lot of people, especially non gamers. We’ve found that the biggest contributor to dizziness appears to be peripheral movement - as we’ve built some driving simulators that employ three screens, with the car wing mirrors and side windows effectively on the outer monitors. This false movement (because your brain knows you’re not really moving) can floor even the most hard core gamer after… 40 minutes or so if you don’t take a break. I’ve noticed my own tolerance for it has improved through repeated use, which is probably like training a pilot, but this is no good for someone who picks it up for the first time. So with my own project I wanted to limit, quite drastically, the chances of vomit-inducing movement.

I found that slowing everything down to a crawl has really helped, but what seems to have helped more… is using the head direction as movement direction. Strafe movement is fairly safe, as your eyes are still focused forward, but as soon as you add body rotation with your hands, while your head stands still… let’s just say that sitting with my head in my hands waiting for the room to stop spinning is something I would rather reserve for a good booze up. :smiley: So my experience (I shy away from calling it a game) does not permit you to run. I’m designing it for anyone who wants to try VR and not just for experienced gamers like myself (33 years and counting). I’m using my wife as a perfect text subject as she has never played games, doesn’t get them and can’t understand why I spend so much time playing them. Makes me (and probably most of you) wonder why I married her. <jokes>

Initially I had a flashlight in the right hand, so you could move it independently of where you were actually looking - but after getting the aforementioned wife and my stepdaughter to have a go… both of them wondered around with the flashlight tightly clutched to their chest, even though it had separate functionality. Clearly they were more concerned with seeing what was directly in front of them, rather than admiring the room around them. Hmmm… interesting. So I dispensed with the handheld flashlight and fixed it to the head instead - so you always illuminate what you’re looking at - makes sense really when you think about it. What I shall probably do is have a helmet with mounted flashlight in the first room - maybe lying on the floor lighting up the exit. The player’s first action will be to pick it up - whether they want to or not. :stuck_out_tongue: The added bonus of the head mounted version is that you reduce peripheral visibility and thus further reduce the chance of sickening your player.

So with slow, non-run movement, head locked to direction of movement and headlight focused visibility I have done as much as I can to limit the chances of spending the afternoon lying on the sofa under a blanket, sipping water and maybe, just maybe risking a dry biscuit.

The second reason I’m not too concerned with more dynamic locomotion is because, as rightly assumed by some of you, I am designing this as something to be played seated, or standing still. Not everyone has a large area to move around in and I’m guessing most people have a small, spare room/man cave where their PC is located. There are inherent downsides to the head direction being used as the “rudder” obviously - you can’t really use a keyboard. I mentioned WASD as a movement method as people understand it - I also intend to include a standard FPS type version for those without VR equipment, so in their case they will no doubt be using keyboard and mouse. I don’t know what percentage of VR users have controllers - motion or XBox - so I’m taking a little risk using that as my primary control method. With the tests I’ve done so far… standing isn’t an issue at all really. It feels natural to turn on the spot before moving. The chair also feels good with one MAJOR exception… the VR headset cable gets wrapped around you and the seat! Going 180 is fine… as long as you rotate back in the opposite direction. Otherwise you’re soon going to be tied to your chair and screaming for help to untangle yourself.

Apologies for such a large post again - just trying to paint a clearer picture of where I am with it. Nothing is set in stone at all and if a better system presents itself while I’m developing this, then I will definitely jump on it. I shall check out those plugins and see how they feel - I definitely need gravity, so will no doubt end up using an existing system. I just have to be very careful that I don’t stray too far from my original path - of creating something that is designed for everyone and not just gamers. My brother will be THE perfect test subject when I show it to him - he’s a pretty famous horror writer with no gaming or VR experience. If I can drop him in it and immerse him in a horror world he has yet to experience and he comes out smiling… I’ve done my job. :cool:

Thanks again for all the help guys - I’ll keep you posted as I delve further into this.

Cheers

Nev

I was not able to find a solution. But thanks for this thread. Thanks CreatureFeep for details info.

very cool
hope it working for 4.27
I’m in beginning vr stages.
looking for a cool locomotion solution