I'm have created a simple 3D character movement in unity with state machine, and new input system. I had an issue where the player object move faster while strafing, but move for up, down, left, and right are the same. I already normalized the Vector3 moveDir. How can i fix this?
PlayerStateMachine script :
CharacterController playerControl;
PlayerInputSystm playerInput;
PlayerBaseState playerCurrState;
PlayerStateFactory playerCurrFactory;
float xDir;
float zDir;
public CharacterController PlayerControl { get { return playerControl; } }
public PlayerBaseState PlayerCurrState { get { return playerCurrState; } set { playerCurrState = value; } }
public float XDir { get { return xDir; } set { xDir = value; } }
public float ZDir { get { return zDir; } set { zDir = value; } }
private void Awake()
{
playerControl = GetComponent<CharacterController>();
playerInput = new PlayerInputSystm();
playerCurrFactory = new PlayerStateFactory(this);
playerCurrState = playerCurrFactory.Idle();
playerCurrState.EnterState();
playerInput.Player.Movement.performed += OnMove;
playerInput.Player.Movement.canceled += OnMove;
}
void Update()
{
playerCurrState.UpdateState();
}
void OnMove(InputAction.CallbackContext ctx_move)
{
xDir = ctx_move.ReadValue<Vector3>().x;
zDir = ctx_move.ReadValue<Vector3>().z;
}
private void OnEnable()
{
playerInput.Player.Movement.Enable();
}
private void OnDisable()
{
playerInput.Player.Movement.Disable();
}
PlayerIdleState script :
public override void UpdateState()
{
CheckSwitchState();
}
public override void ExitState()
{
}
public override void CheckSwitchState()
{
if(ctx.XDir != 0 || ctx.ZDir != 0)
{
SwitchState(factory.Run());
}
}