Странные значения при отладке значений в Unity - PullRequest
0 голосов
/ 21 февраля 2019

Я обнаружил, что во время отладки чисел в Unity значения иногда отключаются.Т.е. у меня есть float с именем currentSpeed, и когда игрок движется, это значение, а когда он не равен 0. Проблема в том, что при отладке этого значения во время ходьбы происходит следующее;т.е. 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1.Я обнаружил, что это происходит с несколькими значениями и векторами.Странно то, что когда моя частота кадров ниже, это не происходит (то есть, когда игрок выбран в инспекторе, частота кадров падает с 60 до 48).Я использую Unity 2018.3 и понятия не имею, как это исправить.Я надеюсь, что кто-нибудь может мне помочь.

Редактировать (добавить код):

void Move(Vector2 inputDir, bool running)
{
    if (inputDir != Vector2.zero)
    {
        // When the player is not pushing we can create a moving direction
        if (!playerIsPushing)
        {
            float targetRotation = Mathf.Atan2(inputDir.x, inputDir.y) * Mathf.Rad2Deg + cameraT.eulerAngles.y;
            transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, GetModifiedSmoothTime(turnSmoothTime));
        }
    }

    float targetSpeed = ((running) ? runSpeed : movementSpeed) * inputDir.magnitude;
    currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, GetModifiedSmoothTime(speedSmoothTime));

    velocityY += Time.deltaTime * gravity;

    Vector3 velocity = transform.forward * currentSpeed + Vector3.up * velocityY;

    // Here we cap the players velocity to a maximum speed. In this case the runSpeed. This means the player can never exceed the runSpeed.
    if (velocity.x > runSpeed)
    {
        velocity.x = runSpeed;
    }

    if (velocity.x < -runSpeed)
    {
        velocity.x = -runSpeed;
    }

    if (velocity.z > runSpeed)
    {
        velocity.z = runSpeed;
    }

    if (velocity.z < -runSpeed)
    {
        velocity.z = -runSpeed;
    }

    controller.Move(velocity * Time.deltaTime);

    currentSpeed = new Vector2(controller.velocity.x, controller.velocity.z).magnitude;

    // Debugging the players velocity
    Debug.Log(currentSpeed);

    float animationSpeedPercent = ((running) ? currentSpeed / runSpeed : currentSpeed / movementSpeed * .5f);

Редактировать 2: Я протестировал еще несколько и обнаружил, что моя pushforce не зависит от частоты кадров.Во время нажатия на объект в моей игре я вижу странные значения при отладке, то есть 1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,Я работаю с CharacterController, поэтому добавление силы к жесткому телу осуществляется через скрипт.

void OnControllerColliderHit(ControllerColliderHit hit)
{
    Rigidbody body = hit.collider.attachedRigidbody;

    if (body == null || body.isKinematic)
        return;

    if (hit.moveDirection.y < -.3f)
        return;

    Vector3 pushDirection = new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z);
    body.velocity = pushForce * pushDirection;
}

Может быть, это проблема странных значений?

...