Персонаж идет назад без причины (контроллер персонажа от первого лица в скобках в Unity)

#unity3d

#unity3d

Вопрос:

Я использую скрипт контроллера персонажа от первого лица из Brackeys. Но иногда мой персонаж идет назад без нажатия кнопки. Я пытался изменить значения контроллера персонажа и изменить значения оси в настройках проекта, но ничего не помогло.

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovementScript : MonoBehaviour
{
    public CharacterController controller;

    public Transform groundcheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;

    public float speed = 12f;
    public float gravity = -9.81f;
    public float jumpheight = 3f;

    Vector3 velocity;

    bool isGrounded;

    void Start()
    {

    }
    void Update()
    {
        isGrounded = Physics.CheckSphere(groundcheck.position, groundDistance, groundMask);

        if (isGrounded amp;amp; velocity.y < 0)
        {
            velocity.y = -2f;
        }

        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 move = transform.right * x   transform.forward * z;

        controller.Move(move * speed * Time.deltaTime);

        if (Input.GetButtonDown("Jump") amp;amp; isGrounded)
        {
            velocity.y  = Mathf.Sqrt(jumpheight * -2f * gravity);
        }
        
        velocity.y  = gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);
        
    }
}
 

Я действительно не знаю, в чем проблема, но, может быть, вы сможете мне помочь

Комментарии:

1. Для чего velocity хорош вектор, если вы все равно хотите использовать только его y компонент? И что тогда вам Debug.Log(z); дает?

2. Извините за поздний ответ. Отладка. Log (z) дает мне значение -1, если я иду назад

3. Похоже, что что-то постоянно заставляет вас быть отрицательным. Input.GetAxis("Vertical") ..

4. Я просмотрел все свои сценарии, но не нашел ничего, что могло бы вызвать мою вертикальную ось. Есть ли настройка для оси, которая может вызвать это? Или, может быть, компонент, который не был настроен правильно?

Ответ №1:

Я не вижу ничего плохого в сценарии. Что-то должно давать вертикальный ввод вне скрипта.

Если вы используете контроллер, у вашего левого джойстика могут возникнуть проблемы с дрейфом. Добавление некоторой мертвой зоны к вашему вектору движения может предотвратить любое непроизвольное движение. Например, вы можете проверить, не уступает ли ваш ввод определенному порогу, и установить его равным нулю, если это так. Вот простой способ сделать это (в этом примере пороговое значение равно 0.125. Если смещение джойстика все еще выдает ввод, попробуйте использовать более высокое значение.):

 float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
if(x <= 0.125f)
   x = 0
if(y <= 0.125f)
   y = 0
 

Ответ №2:

Здесь немного поздно, но у меня была та же проблема. Причиной этого было подключение другого контроллера, кроме мыши и клавиатуры, в моем случае рулевого колеса. Поэтому убедитесь, что все дополнительные контроллеры отключены