Left Joystick Translation Depending on Facing Direction

I’m hitting a wall on this really simple problem… I know there has to be a simple solution, but I’m not exactly sure what it is. I’m prototyping for a game jam – my game is a top down, 3D twin sticks style game. The right stick rotates the player and the left stick controls the movement. The movement is done via animations in Mecanim – I have forward/backward/strafing setup and blended.

My problem is right now it moves like Resident Evil – “up” on the joystick drives the character forward no matter what direction she is facing. I need to translate “up” on the joystick to be relative to the world – not the player (ie: if facing right, “up” should make her strafe left). What am I trying to find? I’m pretty sure there’s some built it translation that I need to call…

I’m using Unity and am sending Horizontal and Vertical values between -1 and 1 to Mecanim. I need to translate these values based on character rotation so “up” moves the character toward the top of the screen based on it’s original rotation.

Hi @brandoncluff

You need to do space conversion for your direction vector.

Unity has built in methods in Vector classes called (several), in this case:

var h = Input.GetAxis("Horizontal");
var v = Input.GetAxis("Vertical");
ctrlVec = new Vector3(h,0,v);
relVec = body.InverseTransformDirection(ctrlVec);

Now when you press L stick up, (0,0,1), vector direction will be rotated relative to characters forward, and value will be (-1,0,0), which is left in character local space, which can drive possibly your animation clips.