Finally, I have a little something to contribute…
Chaperone bounds BP bug (and fix!)
(Tested with latest example: -vrexppluginexample-c64a3b80b871.zip)
When using room scale on Vive, the chaperone bounds used by the teleport preview are wrongly oriented.
The head aiming arrow is correct.
Simple demonstration:
Set Vive_PawnCharacter.bTeleportUsesThumbRotation = false (to avoid inadvertent rotation)
Point HMD towards a corner of your play area.
Start the game.
Note that view is aligned with world axis (as defined by PlayerStart), and that the SteamVR chaperone is correctly at ~45 degrees to .
Start a teleport preview, note that although chaperone shows that you are looking towards a corner, the teleport preview says you aren’t.
Aim directly down, and you can easily see that the preview doesn’t match
The head aiming arrow is correct, but the chaperone preview is wrong.
The fix is to correct the offset. Insert the selected elements:
fixes the orientation of the teleport preview.
However, if (like me) you prefer Vive_PawnCharacter.bTeleportUsesThumbRotation = false, then you will now notice that, in general, you have a permanent rotational offset between your playspace and the game world.
is because on startup the game world is rotated so that the HMD view direction is as indicated by PlayerStart. So, if you are facing towards a corner of your playspace when you start to play, then the world will be rotated by ~45 degrees relative to your playspace.
It’s much nicer to not have offset, so I added a new variable ‘Align World With Chaperone Axes’, which when set to true quantises the output of GetHMDPureYaw to the nearest multiple of 90 degrees. The effect of is that your playspace (and hence chaperone region) will always be aligned with the XY gameworld axes.
The (minor) cost is that your starting view direction will only be within +/- 45 degrees of that defined by PlayerStart.
To add functionality add the selected elements:
works whether you set Vive_PawnCharacter.bTeleportUsesThumbRotation to true or false, but isn’t really needed when it is true. When it is false though, I find it essential!