Gamepad | Unity | C#
Пытаюсь через геймпад управлять персонажом. Использую InputActions. Сделал все как по урокам юнити. Все работало, пока я не повернул персонажа. Хоть он и продолжает двигаться, но по смещенным осям (точнее они остаются прежними, а персонаж смещается). Как итог, вместо того, чтобы идти направо, он идет вперед и т.п.
public float speedMove = 5f;
public float rotatePower = 2f;
float gravityForce;
CharacterController ch;
Vector2 moveInput;
Vector2 rotateInput;
Control inputSystem;
Animator anim;
private void Awake()
{
inputSystem = new Control();
inputSystem.Gameplay.Grow.performed += ctx => Grow();
inputSystem.Gameplay.Move.performed += ctx => moveInput = ctx.ReadValue<Vector2>();
//inputSystem.Gameplay.Move.canceled += ctx => moveInput = Vector2.zero;
inputSystem.Gameplay.Rotate.performed += ctx => rotateInput = ctx.ReadValue<Vector2>();
//inputSystem.Gameplay.Rotate.canceled += ctx => rotateInput = Vector2.zero;
}
private void Grow()
{
transform.localScale *= 1.1f;
}
private void Start()
{
ch = GetComponent<CharacterController>();
anim = GetComponent<Animator>();
}
private void FixedUpdate()
{
Vector3 move = new Vector3();
move.x = moveInput.x * speedMove;
move.z = moveInput.y * speedMove;
Debug.Log(moveInput);
if(Vector3.Angle(Vector3.forward, new Vector3(Mathf.Abs(move.x), Mathf.Abs(move.y), Mathf.Abs(move.z))) > 1f || Vector3.Angle(Vector3.forward, new Vector3(Mathf.Abs(move.x), Mathf.Abs(move.y), Mathf.Abs(move.z))) == 0)
{
Vector3 direction = Vector3.RotateTowards(transform.forward, move, speedMove, 0f);
transform.rotation = Quaternion.LookRotation(direction);
}
gravity();
move.y = gravityForce;
ch.Move(move * Time.fixedDeltaTime);
}
private void gravity()
{
if (!ch.isGrounded) gravityForce -= 20f * Time.deltaTime;
else gravityForce = -1f;
}
private void OnEnable()
{
inputSystem.Gameplay.Enable();
}
private void OnDisable()
{
inputSystem.Gameplay.Disable();
}
Кто-то сталкивался с подобным? Что делать?