Разрешается изменение только x Позиции со временем, используя положение соединения тела Kinect в Unity - PullRequest
0 голосов
/ 21 февраля 2019

Ребята, я делаю бесконечную игру для раннеров, которая будет управляться с помощью положения тела.

Я пытаюсь перемещать персонажа влево или вправо (по оси X) с помощью положения моего тела с помощью датчика Kinect.Персонаж может свободно двигаться вперед (по оси z) с Time.deltaTime.У персонажа CharacterController и скрипт прилагается.Ниже приведен код для движения:

CharacterController controller;
KinectManager kinectManager;
float speed = 5.0f
Vector3 moveDir;
void Update()
{
    moveDir = Vector3.zero;
    moveDir.z = speed;
    moveDir.x = kinectManager.instance.BodyPosition * speed;

    //controller.Move(moveDir * Time.deltaTime);

    controller.Move(new Vector3 (moveDir.x, 0, moveDir.z * Time.deltaTime));
}

Этот оператор controller.Move(moveDir * Time.deltaTime); продолжает перемещать символ влево или вправо, потому что позиция x увеличивается на Time.deltaTime, поэтому я хотел ограничить это и изменил наcontroller.Move(new Vector3 (moveDir.x, 0, moveDir.z * Time.deltaTime));.

Теперь происходит то, что персонаж застрял в той же позиции.Я могу двигаться влево или вправо в зависимости от положения тела, но не могу двигаться вперед.Что мне здесь не хватает?

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 февраля 2019

Выявление проблем

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

Раствор

void Update()
{
    if (controller.isGrounded)
    {
        // We are grounded, so recalculate
        // move direction directly from axes

        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection = moveDirection * speed;

        if (Input.GetButton("Jump"))
        {
            moveDirection.y = jumpSpeed;
        }
    }

    // Apply gravity
    moveDirection.y = moveDirection.y - (gravity * Time.deltaTime);

    // Move the controller
    controller.Move(moveDirection * Time.deltaTime);
}
...