Единство обновления движения вектор.Физический смысл векторных значений - PullRequest
2 голосов

Я пытаюсь понять физический смысл примера из книги «Единство в действии» конца 2-й главы.В этом коде объект движется к «дельте» Vector3 в кадре.Vector3 здесь вектор скорости в точке?Если да, то почему автор использовал гравитационную переменную со значением ускорения силы тяжести (9,8) в том же векторе?

public class FPSInput : MonoBehaviour {
    public float speed = 6.0f;
    public float gravity = -9.8f;
    private CharacterController _charController;

    void Start() {
        _charController = GetComponent<CharacterController>();
    }

    void Update() {
        float deltaX = Input.GetAxis("Horizontal") * speed;
        float deltaZ = Input.GetAxis("Vertical") * speed;
        Vector3 movement = new Vector3(deltaX, 0, deltaZ);
        movement = Vector3.ClampMagnitude(movement, speed);
        movement.y = gravity;
        movement *= Time.deltaTime;
        movement = transform.TransformDirection(movement);
        _charController.Move(movement);
    }
}

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Есть два вида перемещения объекта в единстве

  1. Добавить силу к юниту и толкнуть его.
  2. Установка позиции единицы измерения каждый раз по истечении (также называемой скользящей единицей)

В вашем случае это тип 2, поэтому ваше движение Vector3 указывает на положение движущейся единицы.

В вашем коде движение вычисляется кратным Input.GetAxis() (диапазон значений: [0, 1]) со значением скорости, затем берется максимальное расстояние, на которое интервал, на который единица может двигаться, movement = Vector3.ClampMagnitude(movement, speed);. Это просто для перемещения юнита по земле (влево, вправо, вперед, назад)

Далее для высоты блока, движение применяет ось y, равную значению силы тяжести (9,8), кратному deltaTime. Это означает, что высота каждой единицы измерения уменьшается на 9,8

.

В конце концов, конвертируйте movement из локального в мир, затем установите положение движущейся единицы на movement.

Надеюсь, мой ответ может решить вашу проблему.

0 голосов
/ 07 июня 2019

Движение Vector3 - это вектор различий в движении персонажа в одном кадре (обновление) игры.

Таким образом, чтобы двигаться, он сначала берет пользовательские элементы управления для осей X и Z, умножает их на скорость.

Тогда вам нужно применить гравитацию, потому что без нее вы будете летать куда угодно, а не ходить, поэтому вам нужно применить гравитацию для вертикальной оси Y. "9,8" - это стандартная гравитация на земле.

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

И затем он применяет вектор "движения" (как я уже говорил, разница в движении в одном кадре) к текущей позиции персонажа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...