Я обнаружил, что во время отладки чисел в 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;
}
Может быть, это проблема странных значений?