使用Unity中的Kinect身体关节位置仅允许x位置随时间变化

时间:2019-02-21 11:33:49

标签: c# unity3d kinect

伙计们,我正在制作一款无尽的亚军游戏,它将通过身体位置进行控制。

我试图通过使用Kinect传感器使角色的身体位置向左或向右(x轴)移动。字符可以Time.deltaTime向前移动(z轴)。字符带有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 :(得分:0)

发现问题

首先尝试仔细观察轴的位置,因为您将0值分配给了它的游戏对象y轴。以下代码将帮助您找到问题并解决。

解决方案

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