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();
    }

Кто-то сталкивался с подобным? Что делать?


Ответы (0 шт):